containerd 介绍

发布时间: 更新时间: 总字数:952 阅读时间:2m 作者:IP:上海 网址

containerd 是一个高级容器运行时,通过守护进程来管理容器的完整生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。

介绍

  • docker 在底层使用 containerd 来运行容器
  • containerd 是从 docker 中拆分出来的。containerd 提供的功能包括:
    • 镜像下载
    • 镜像管理
    • 创建管理容器(调用 Low-Level 的 runc 来完成),当从镜像创建容器时,首先将镜像解开成 OCI runtime bundle,然后调用 runc 来运行容器

安装

# ubuntu
apt install -y containerd

# redhat
yum install -y containerd.io

配置

生成配置文件:

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

基本配置

  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true

镜像加速

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
            endpoint = ["https://registry-1.docker.io", "https://ghihfm4j.mirror.aliyuncs.com", "https://hub.0931.date"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
            endpoint = ["https://gcr.m.daocloud.io", "https://gcr.0931.date"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
            endpoint = ["https://gcr.mirrors.ustc.edu.cn/google-containers/", "https://k8s-gcr.m.daocloud.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
            endpoint = ["https://ghihfm4j.mirror.aliyuncs.com", "https://quay.m.daocloud.io"]

检查配置是否生效:

# 重启 containerd 服务(确保配置生效)
sudo systemctl restart containerd

crictl info
crictl --debug=true pull nginx:1.9.3

containerd 客户端

containerd 的客户端有:ctr、crictl、nerdctl

Name Community API Target Web site
ctr containerd Native For debugging only (None, see ctr --help to learn the usage)
nerdctl containerd (non-core) Native General-purpose https://github.com/containerd/nerdctl
crictl Kubernetes SIG-node CRI For debugging only https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md

虽然 ctr 工具与 Containerd 捆绑在一起,但应该注意的是,ctr 工具仅用于调试 Containerd。 nerdctl 工具提供稳定且人性化的用户体验。

logo

图片来自

命令 docker ctr(containerd) crictl(kubernetes)
查看运行的容器 docker ps ctr task ls/ctr container ls crictl ps
查看镜像 docker images ctr image ls crictl images
查看容器日志 docker logs 无 crictl logs
查看容器数据信息 docker inspect ctr container info crictl inspect
查看容器资源 docker stats 无 crictl stats
启动/关闭已有的容器 docker start/stop ctr task start/kill crictl start/stop
运行一个新的容器 docker run ctr run 无(最小单元为 pod)
打标签 docker tag ctr image tag 无
创建一个新的容器 docker create ctr container create crictl create
导入镜像 docker load ctr image import 无
导出镜像 docker save ctr image export 无
删除容器 docker rm ctr container rm crictl rm
删除镜像 docker rmi ctr image rm crictl rmi
拉取镜像 docker pull ctr image pull ctictl pull
推送镜像 docker push ctr image push 无
登录或在容器内部执行命令 docker exec 无 crictl exec
清空不用的容器 docker image prune 无 crictl rmi –prune

ctr

  • ctr 是 containerd 项目的一部分,提供的命令行客户端
  • ctr + containerd 对标 docker + dockerd
# 拉取镜像
ctr images pull docker.io/library/nginx:1.21
ctr images pull quay.io/quay/redis:latest

# 列出本地镜像
ctr images ls

# containerd 不提供开箱即用的镜像构建支持,可以导入其他镜像
docker save -o nginx.tar nginx:1.21
ctr images import nginx.tar

# 挂载镜像文件到文件系统
mkdir nginx
ctr images mount docker.io/nginx:1.21 /tmp/nginx

# 取消挂载
ctr images unmount /tmp/ngin

# 删除镜像
ctr images remove docker.io/library/nginx:1.21

# 运行
# ctr run 实际上 ctr container create + ctr task start
ctr run --rm -t docker.io/library/nginx:1.21 bash

# 查看运行中的镜像
ctr containers ls

# 查看 task
ctr task ls
ctr task start -d nginx_1

# 重新连接到在容器内运行的任务
ctr task attach nginx_1

# create task
ctr task exec-t -- exec-id bash_1 nginx_1 bash

# 停止task
ctr task kill -9 nginx_1
ctr task rm -f nginx_1

# 删除容器
ctr container rm nginx_1

nerdctl

  • nerdctl 是一个相对较新的 containerd 命令行客户端,目标是促进试验 Docker 中不存在的 containerd 的尖端功能
  • nerdctl 尝试提供与 docker 相同用户体验的命令行工具

crictl

crictl 是 Kubernetes CRI 兼容容器运行时的命令行客户端

F&Q

Containerd fails to stop containers

参考

  1. https://github.com/containerd/containerd/blob/v2.2.0/docs/ops.md