Containerd 和 Docker 命令区别

一、docker 和 containerd

  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

    containerd 作为 k8s 容器运行时,调用关系为:kubelet --> cri plugin(在 containerd 进程中) --> containerd

二、命令区分

  • ctr 是 containerd 的一个客户端工具。
  • crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。
  • ctr -v 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。
[root@localhost test]# ctr -v
ctr github.com/containerd/containerd v1.4.11
[root@localhost test]# crictl -v
crictl version v1.21.0-k3s1

一般来说你某个主机安装了 k8s 后,命令行才会有 crictl 命令。而 ctr 是跟 k8s 无关的,你主机安装了 containerd 服务后就可以操作 ctr 命令。

三、Docker和Containerd两种容器引擎常用命令对比

功能 crictl CLI(Containerd容器)推荐 ctr CLI(Containerd容器) docker CLI(Docker容器)
镜像列举 crictl images ctr image ls docker images
导出镜像 ctr image export app.tar weiyigeek.top/app:1.2.0 docker save -o app.tar app:1.2.0
导入镜像 ctr image import app.tar docker load -i app.tar
拉取镜像 crictl pull redis:latest ctr -n k8s.io images pull docker.io/library/redis:latest docker pull redis:latest
上传镜像 crictl push redis:latest ctr -n k8s.io images push docker.io/library/redis:latest docker push redis:latest
更改标记 ctr -n k8s.io images tag docker.io/library/redis:latest weiyigeek.top/redis:latest docker tag redis:latest weiyigeek.top/redis:latest
删除镜像 crictl rmi redis:latest ctr -n k8s.io images rm docker.io/library/redis:latest docker rmi redis:latest
创建容器 crictl create ctr -n k8s.io container create docker.io/library/redis:latest redis docker create --name redis redis:latest
创建并运行容器 ctr -n k8s.io run -d --env name=WeiyiGeek weiyigeek.top/app:1.2.0 app docker run -d --name app weiyigeek.top/app:1.2.0
查看容器 crictl ps ctr -n k8s.io container list docker ps
启动容器 crictl start ctr -n k8s.io task start app docker start app
暂停容器 ctr -n k8s.io task pause app docker pause app
停止容器 crictl stop ctr -n k8s.io task kill app docker stop app
删除容器 crictl rm ctr -n k8s.io container rm [-f] app docker rm [-f] app
容器详情 crictl inspect app ctr -n k8s.io c info app docker inspect app
容器连接 crictl attach ctr -n k8s.io task attach app docker attach app
进入容器 crictl exec -it app sh ctr -n k8s.io task exec -t --exec-id pid app sh docker exec -it app sh
stats(状态) crictl stats ctr -n k8s.io task metric app docker top app
日志查看 crictl logs ctr -n k8s.io event docker logs --tail 50 app
查看Pod列表 crictl pods
查看Pod详情 crictl inspectp
启动Pod crictl runp
停止Pod crictl stopp
复制容器文件 1、挂载本地磁盘/tmp/mymount到app容器:ctr -n k8s.io snapshot mounts /tmp/mymount app | xargs sudo 2、从本地/tmp/mymount目录复制文件:cp /tmp/mymount/data ~/data 3、卸载/tmp/mymount目录:umount /tmp/mymount docker cp

四、参考

如何选择Docker运行时、Containerd运行时、或者安全沙箱运行时?

你可能感兴趣的:(Containerd 和 Docker 命令区别)