一、docker 和 containerd的调用链对比
image.png
1.docker由docker-client、dockerd、containerd、docker-shim、runc组成,所以containerd是docker的基础组件之一
2.从k8s的角度看,可以选择 containerd 或 docker 作为运行时组件:由于 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。所以k8s后来的版本开始默认使用 containerd 。
3.containerd 相比于docker , 多了 namespace 概念,每个 image 和 container 都会在各自的namespace下可见。
4.docker 作为 k8s 容器运行时,调用关系为:kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd
5.containerd 作为 k8s 容器运行时,调用关系为:kubelet --> cri plugin(在 containerd 进程中) --> containerd
二、命令区分
1.ctr 是 containerd 的一个客户端工具。
2.crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。
3.ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。
三、常用命令及对比
命令 | docker | crictl(推荐) | ctr |
---|---|---|---|
查看容器列表 | docker ps |
crictl ps |
ctr -n k8s.io c ls |
查看容器详情 | docker inspect |
crictl inspect |
ctr -n k8s.io c info |
查看容器日志 | docker logs |
crictl logs |
无 |
容器内执行命令 | docker exec |
crictl exec |
无 |
挂载容器 | docker attach |
crictl attach |
无 |
显示容器资源使用情况 | docker stats |
crictl stats |
无 |
创建容器 | docker create |
crictl create |
ctr -n k8s.io c create |
启动容器 | docker start |
crictl start |
ctr -n k8s.io run |
停止容器 | docker stop |
crictl stop |
无 |
删除容器 | docker rm |
crictl rm |
ctr -n k8s.io c del |
查看镜像列表 | docker images |
crictl images |
ctr -n k8s.io i ls |
查看镜像详情 | docker inspect |
crictl inspecti |
无 |
拉取镜像 | docker pull |
crictl pull |
ctr -n k8s.io i pull |
推送镜像 | docker push |
无 | ctr -n k8s.io i push |
删除镜像 | docker rmi |
crictl rmi |
ctr -n k8s.io i rm |
查看Pod列表 | 无 | crictl pods |
无 |
查看Pod详情 | 无 | crictl inspectp |
无 |
启动Pod | 无 | crictl runp |
无 |
停止Pod | 无 | crictl stop |
无 |
修改镜像标签 | docker tag |
无 | ctr -n k8s.io image tag |
导入镜像 | docker load |
无 | ctr -n k8s.io image import |
导出镜像 | docker save |
无 | ctr -n k8s.io image export |
批量删除容器未使用的镜像 | docker image prune -a |
crictl rmi --prune |
注意:
#要用ctr操作或查看k8s的相关镜像或者容器,需要在前面加上-n k8s.io,例如:要查看k8s中的镜像
ctr -n k8s.io image ls
#ctr导出镜像
ctr -n k8s.io image export centos.tar.gz docker.io/library/centos:latest
#ctr导入镜像
ctr -n k8s.io image import centos.tar.gz
#ctr推送镜像(先tag)
#https方法(默认)
ctr -n k8s.io i push --user 账户:密码 registry.cn-hangzhou.aliyuncs.com/test_dev/debian:latest
#http方法
ctr -n k8s.io i push --platform linux/amd64 --user 账户:密码 registry.cn-hangzhou.aliyuncs.com/test_dev/debian:latest