docker、containerd ctr 和 crictl 命令区别

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

  • crictl​ 是遵循CRI接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。
  • ctr​ 是 containerd 的一个客户端工具。
  • ctr -v​ 输出的是 containerd 的版本,crictl -v 输出的是当前 k8s 的版本,从结果显而易见你可以认为 crictl 是用于 k8s 的。

使用crictl​命令之前,需要先配置/etc/crictl.yaml

runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false

也可以通过命令进行设置:

crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///run/containerd/containerd.sock

命令区别:

命令

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

Containerd有namespaces的概念,对于上层编排系统的支持,ctr​ 客户端 主要区分了3个命名空间分别是k8s.io、moby和default​,以上我们用crictl​操作的均在k8s.io​命名空间,使用ctr​ 看镜像列表就需要加上-n参数。crictl是只有一个k8s.io命名空间,但是没有-n参数。

# 注意-n不能放在命令最后面,下面几行查看的镜像是一样的
ctr -n=k8s.io image ls
ctr -n k8s.io image ls

# crictl 没有-n参数,操作都在 k8s.io 命名空间下。
crictl image ls
crictl images

# 使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io image import dashboard.tar