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镜像加速
- 配置 Containerd 加速 Docker 镜像拉取加速器
[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.3containerd 客户端
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 工具提供稳定且人性化的用户体验。

图片来自
| 命令 | 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_1nerdctl
- nerdctl 是一个相对较新的 containerd 命令行客户端,目标是促进试验 Docker 中不存在的 containerd 的尖端功能
- nerdctl 尝试提供与 docker 相同用户体验的命令行工具
crictl
crictl 是 Kubernetes CRI 兼容容器运行时的命令行客户端