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

相关推荐
whyfail8 分钟前
Colima:把 Docker Desktop 从 Mac 上“瘦身”的那把刀
macos·docker·容器
大佐不会说日语~2 小时前
在 Windows 本地用 Docker 部署向量模型(bge-m3)
windows·docker·容器·llm·ollama
xsc-xyc2 小时前
CasaOS + Docker 挂载外接硬盘部署 Jellyfin 私人影院
运维·docker·容器
码云骑士2 小时前
27-Docker部署Django(上)-从2GB到180MB的镜像瘦身实战
docker·容器·django
日取其半万世不竭2 小时前
PostgreSQL 跑在 Docker 里怎么备份?恢复成功才算备份成功
数据库·docker·postgresql
至此流年莫相忘2 小时前
WSL2 下 Docker Desktop 完全配置指南:从安装到极速体验
运维·docker·容器
万能的知了3 小时前
K8s到底需不需要GPU节点?集群资源分配的底层逻辑
云原生·容器·kubernetes
极客先躯3 小时前
高级java每日一道面试题-2026年02月12日-实战篇[Docker]-什么是容器的 Seccomp 配置?如何自定义?
java·运维·分布式·docker·容器·自动化·文件
master3364 小时前
GitLab (Docker) 常用命令及解决方案清单
docker·容器·gitlab
卧室小白4 小时前
K8S基础-控制器&deploy&pod回滚更新&service
docker·容器·kubernetes