一、docker 和 containerd

1、docker 由 docker-client ,dockerd,containerd,docker-shim,runc等组成,所以containerd是docker的基础组件之一
  注意不同版本的docker,名称也不一样(包括调用链条是不一样的)
2、从k8s的角度看,可以选择 containerd(目前社区开发是比较活跃的) 或 docker作为运行时组件:其中 containerd 调用链更短,组件更少,更稳定,占用节点资源更少。
   所以k8s后来的版本开始默认使用 containerd 。
3、containerd 相比于docker , 多了 namespace 概念,每个 image 和 container 都会在各自的namespace下可见。
4、docker 作为 k8s 容器运行时,调用关系为:   kubelet --> dockershim (在 kubelet 进程中)  --> dockerd --> containerd
  containerd 作为 k8s 容器运行时,调用关系为: kubelet --> cri plugin(在 containerd 进程中) --> containerd

二、命令区分
 ctr工具(二进制程序) 是 containerd 的一个客户端工具。

[root@ht6 ~]# ctr -v
ctr containerd.io 1.5.11

[root@ht6 ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.14
 API version:       1.41
....
ctr -v 输出的是 containerd 的版本

kubelet通过cri和containerd进行交互。crictl也可以通过cri规范和containerd交互
crictl 是 CRI(规范) 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s node节点上的容器运行时和应用程序。

安装 CRI 客户端 crictl

下载地址: https://github.com/kubernetes-sigs/cri-tools/releases/
查看: https://github.com/containerd/cri/blob/master/docs/crictl.md
[root@ht6 ~]#wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.20.0/crictl-v1.20.0-linux-amd64.tar.gz
[root@ht6 ~]#tar zxvf crictl-v1.20.0-linux-amd64.tar.gz -C /usr/local/bin
[root@ht6 ~]#vi /etc/crictl.yaml 
  runtime-endpoint: unix:///run/containerd/containerd.sock
  image-endpoint: unix:///run/containerd/containerd.sock
  timeout: 10
  debug: false
//使用
[root@ht6 ~]#crictl -v
[root@ht6 ~]#crictl  pull nginx:alpine
[root@ht6 ~]#crictl  rmi  nginx:alpine
[root@ht6 ~]#crictl  images

注意几点:
1.crictl需要单独安装,它和k8s没有直接关系
2.ctr命令在docker 20.10-ce版本中有

 

三、比较下区别
 

命令

docker

ctr(containerd)

crictl(k8s)              

命令

docker

ctr(containerd)

crictl(k8s)

查看运行的容器

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


修改镜像标签

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