containerd 是一个高级容器运行时,通过守护进程来管理容器的完整生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等。
介绍
- docker 在底层使用
containerd 来运行容器
containerd 是从 docker 中拆分出来的。containerd 提供的功能包括:
- 镜像下载
- 镜像管理
- 创建管理容器(调用
Low-Level 的 runc 来完成),当从镜像创建容器时,首先将镜像解开成 OCI runtime bundle,然后调用 runc 来运行容器
安装
加速
containerd 客户端
containerd 的客户端有:ctr、crictl、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_1
nerdctl
- nerdctl 是一个相对较新的 containerd 命令行客户端,目标是促进试验 Docker 中不存在的 containerd 的尖端功能
- nerdctl 尝试提供与 docker 相同用户体验的命令行工具
crictl
crictl 是 Kubernetes CRI 兼容容器运行时的命令行客户端