docker笔记14--docker-nerdctl-crictl-ctr使用对比

docker笔记14--docker-nerdctl-crictl-ctr使用对比

介绍

随着容器云技术的成熟,越来越多的从业者开始接触、熟悉 docker和containerd 了,很多时候需要同时在 docker 和 containerd之间切换,因此有必要熟悉主流容器产品常见的交互工具。

此处根据笔者使用经验整理出 docker nerdctl crictl ctl 四个工具的常见用法和注意事项,写在此处分享给有需要的小伙伴学习,也方便自己后续查阅.

工具对比

此处列举一些 docker 和 containerd 命令行工具中常见的一些命令, nerdctr | ctr 默认为default命名空间, crictl 默认为 k8s.io 命名空间。

docker nerdctl crictl ctr 备注
docker run nerdctl run crictl run ctr run -
docker exec -it NAME|ID sh nerdctl exec -it NAME|ID bash crictl exec -it container-id sh ctr t exec -t --exec-id CONTAINER sh 进入容器
docker ps nerdctl ps crictl ps ctr c ls -
docker start NAME|ID nerdctl start crictl start ctr t start -
docker stop NAME|ID nerdctl stop crictl stop - -
docker stats NAME|ID nerdctl stats crictl stats - 容器资源使用情况
docker inspect NAME|ID nerdctl inspect crictl inspect container-id ctr c info 容器对象信息
docker rm NAME|ID nerdctl rm crictl rm ctr c rm -
docker cp nerdctl cp - - -
docker save nerdctl save - - -
docker load nerdctl load - - -
docker commit nerdctl commit - - -
docker images nerdctl images crictl images ctr i ls -
docker logs nerdctl logs crictl logs - -
docker build nerdctl build - - -
docker rmi nerdctl rmi crictl rmi ctr i rm -
docker pull nerdctl pull crictl pull ctr i pull -
docker tag nerdctl tag - ctr i tag -
docker push nerdctl push - ctr i push -
docker login nerdctl login - - -
docker logout nerdctl logout - - -
- nerdctl namespace ls - ctr ns ls 查看containerd命名空间

docker

Docker 命令行工具docker,它可以用于和DockerCE 、DockerEE产品交互,包含所有的docker命令。网上已经有很多使用文档了,此处就不列举了,有需要请参考官方文档 https://docs.docker.com/engine/reference/commandline/docker/

源码:github docker/cli

nerdctl

nerdctl 是适用于containerd的docker兼容命令行工具,它的绝大多数命令基本和docker的用法一致,更多信息命令请参考官方文档 https://github.com/containerd/nerdctl/blob/main/docs/command-reference.md

用法基本和docker命令行一致,此处不赘述了,后续不定期补充一些nerdctl使用注意事项

nerdctl namespace list 可以快速看到当前的命名空间,以及对应空间中容器和镜像、卷的数量.

注意:

1 nerdctl 删除或者变更容器的时候要保证容器ID|NAME唯一,否则会出现 multiple IDs found with provided prefix 的错误

如下通过ctr创建 nginx-test 和 nginx-test2 的容器,stop nginx-test的时候就会报错

crictl

crictl 是 kubelet容器运行时接口(CRI)的命令行和验证工具。CRI-tools旨在为Kubelet CRI提供一系列调试和验证工具,其中包括:

crictl: kubelet CRI的CLI。

critest: kubelet CRI的验证测试套件。

源码: https://github.com/kubernetes-sigs/cri-tools/

它查看的是 k8s.io 命名空间内的容器资源,没有提供额外命名空间选项。

它提供了很多和k8s强相关的命令,例如 port-forward 、runp、 rmp、pods、stopp、statsp ;

也提供了很多和docker类似的命令,例如 exec、logs、ps、run、pull、stop,但有些底层逻辑和nerdctl等工具看到的不太相同,例如 crictl 看到的容器比nerdctl看到的少一些,因为它屏蔽了一些k8s中不需要用户关注的pause 容器.

注意:

  1. crictl 没有 build, push 等镜像相关的操作

ctr

正如Docker产品有默认的命令行工具docker一样,containerd 也有一个基础的工具ctr,它包含了容器操作的常见命令,功能没有docker、nerdctl完善,主要用于containerd debug。

源码位置: https://github.com/containerd/containerd

ctr 部分功能如下:

ctr ns list

用于查看命名空间, 不加命名空间默认为default命名空间

ctr c create docker.io/library/nginx:1.23.4 nginx-test # 创建容器

ctr c ls # 查看容器

ctr c info nginx-test # 查看容器详细信息

ctr t start nginx-test -d # ctr c create 的容器并没有处于运行状态,需要通过ctr t start 启动容器

ctr t kill nginx-test # 停掉指定的task

ctr t ls # 查看 task

ctr run -d docker.io/library/nginx:1.23.4 nginx-test2 # 直接启动一个容器,效果等价于 ctr c create + ctr t start 两个命令

ctr i ls # 查看镜像

ctr i pull docker.io/library/nginx:1.23.4 # 拉镜像

ctr i rm docker.io/library/nginx:1.23.4 # 删除镜像

ctr i tag docker.io/library/nginx:1.23.4 your-harbor.com/library/nginx:1.23.4 # 镜像打标签

ctr i push your-harbor.com/library/nginx:1.23.4 --platform=linux/amd64 --user 'yourUser:yourPassword' # 推镜像

注意:

  1. 直接push会报错 ctr: content digest sha256:67xxxf2: not found ,需要加上--platform=linux/amd64 ,常见可选平台包括:linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x
  2. ctr 没有login 命令,若镜像仓库为私有的,需要加上 --user yourUser:yourPassword

注意事项

  1. 若想查看、操作容器相关信息推荐使用 nerdctl,若想同时看到机器上pod资源就可以考虑用crictl工具了。

说明

辞旧迎新,新手使用Containerd时的几点须知
Container命令ctr,crictl的用法
一文搞懂Containerd
Containerd ctr、crictl、nerdctl 客户端命令介绍与实战操作

相关推荐
duration~1 小时前
K8S自定义CRD
容器·贪心算法·kubernetes
程序员 小柴2 小时前
docker的与使用
java·docker·eureka
ghostwritten2 小时前
Docker Registry Clean
运维·docker·容器
宋冠巡3 小时前
Windows安装Docker(Docker Desktop)
windows·docker·容器
小马爱打代码4 小时前
Kubernetes 中部署 Ceph,构建高可用分布式存储服务
分布式·ceph·kubernetes
阿噜噜小栈4 小时前
最新国内可用的Docker镜像加速器地址收集
运维·笔记·docker·容器
云上艺旅4 小时前
K8S学习之基础六十八:Rancher创建deployments资源
学习·云原生·容器·kubernetes·rancher
rider1894 小时前
【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
云原生·容器·kubernetes
海鸥816 小时前
podman和与docker的比较 及podman使用
docker·容器·podman
GreenMountainEcho12 小时前
Kubernetes 入门篇之 Node 安装与部署
云原生·容器·kubernetes