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 客户端命令介绍与实战操作

相关推荐
努力搬砖的咸鱼9 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
故乡de云9 小时前
2026年谷歌云价格走势深度分析:企业如何在高成本时代保持竞争力?
运维·kubernetes·云计算
lpruoyu10 小时前
【Docker进阶-01】Docker隔离原理与可视化界面-Portainer
docker
舰长11510 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
Swift社区11 小时前
Docker 构建 Python FastAPI 镜像最佳实践
python·docker·fastapi
API开发11 小时前
CentOS 单独安装Docker Compose v2
linux·docker·centos·docker compose
hwj运维之路11 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
chao_78912 小时前
双设备全栈开发最佳实践[mac系统]
git·python·macos·docker·vue·全栈
搬砖者(视觉算法工程师)12 小时前
简单介绍Docker:Docker 容器中预装 Ubuntu 20.04 与 ROS Noetic
docker
hwj运维之路12 小时前
超详细ubuntu22.04部署k8s1.28高可用(一)【多master+keepalived+nginx实现负载均衡】
运维·云原生·kubernetes·负载均衡