一、为什么 nerdctl 很适合日常使用

很多人第一次接触 Containerd 时,会先被 ctr 的命令风格劝退。nerdctl 的价值就在于:

  • 语法风格非常接近 Docker
  • 支持镜像、容器、日志、拷贝、构建等常用操作
  • 更适合作为单机日常管理和实验工具

因此它常被称为 Containerd 环境里的“Docker 风格 CLI”。

二、如何安装 nerdctl

原始笔记里的安装方式非常直接:

  1. 从 GitHub 发布页下载对应平台安装包
  2. 解压后把二进制放到系统路径

下载页:

https://github.com/containerd/nerdctl/releases

安装示例:

tar xf nerdctl-2.0.3-linux-amd64.tar.gz
mv nerdctl /usr/local/bin/

安装完成后,先用版本命令确认:

nerdctl version

相关下载界面:

nerdctl 下载页

三、nerdctl 和 Docker 的最大区别是什么

Day006 里给出的总结很准确:nerdctl 和 Docker 的命令区别其实不大,最明显的差异是 nerdctl 经常需要通过 -n 指定命名空间

例如:

  • default 是默认命名空间
  • Kubernetes 常用 k8s.io
  • 你也可以像示例里一样使用 test

这意味着当你看不到镜像或容器时,先别急着怀疑命令错了,先确认自己是不是在正确的命名空间里操作。

四、nerdctl 常见容器操作怎么做

4.1 创建并运行容器

nerdctl -n test run -d -p 80:80 --name=nginx --restart=always nginx:1.21.6

4.2 查看容器

nerdctl -n test ps
nerdctl -n test ps -a

4.3 查看和进入容器

nerdctl -n test inspect nginx
nerdctl -n test exec -it nginx bash

4.4 启停和删除容器

nerdctl -n test stop nginx
nerdctl -n test start nginx
nerdctl -n test rm nginx

这一整套使用体验和 Docker 非常相似,因此上手成本比 ctr 小很多。

五、nerdctl 常见镜像操作怎么做

5.1 查看、拉取和删除镜像

nerdctl -n test images
nerdctl -n test pull registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.21.6
nerdctl -n test rmi 10.0.0.13/public/nginx:1.21.6

5.2 给镜像打标签

nerdctl -n test tag registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.21.6 10.0.0.13/library/nginx:1.21.6

5.3 保存和加载镜像

nerdctl -n test save -o nginx-1.21.6.tar nginx:1.21.6
nerdctl -n k8s.io load -i nginx-1.21.6.tar

这说明 nerdctl 不仅适合日常拉取运行镜像,也很适合做离线镜像迁移。

六、容器文件、日志和构建也可以直接做

6.1 宿主机与容器之间复制文件

nerdctl -n test cp nginx:/usr/share/nginx/html/index.html /tmp/
nerdctl -n test cp /tmp/index.html nginx:/etc/index.html

6.2 查看容器日志

nerdctl -n test logs -f nginx

6.3 通过 Dockerfile 构建镜像

nerdctl build -t myapp:v1 -f Dockerfile .

这里要注意,构建通常需要依赖 buildkitd

七、如何用 nerdctl 登录仓库并推送镜像

示例里使用了 Harbor 仓库,基本动作与 Docker 类似:

先登录:

nerdctl login http://10.0.0.13:80 -u admin --insecure-registry

然后推送:

nerdctl -n test push --insecure-registry 10.0.0.13:80/project001/nginx:1.21.6

退出登录:

nerdctl logout http://10.0.0.13:80

这里同样建议实际使用时把密码现场输入或通过安全方式传递,不要把固定密码硬编码到可发布文章里。

八、什么时候用 nerdctl,什么时候用 ctr

这两个工具不是互相替代,而是更适合不同场景:

8.1 更适合用 nerdctl 的场景

  • 日常容器管理
  • 想保持接近 Docker 的使用习惯
  • 做镜像拉取、运行、日志查看、文件拷贝

8.2 更适合用 ctr 的场景

  • 调试 Containerd 底层状态
  • 处理命名空间、镜像挂载、底层导入导出
  • 排查运行时内部问题

换句话说:

  • nerdctl 更像日常工作台
  • ctr 更像底层维修工具

九、学 nerdctl 最值得记住的一句话

如果只记一句最实用的话,那就是:

把它当成“Containerd 环境里的 Docker CLI”,但永远别忘了命名空间。

这句话几乎能覆盖 nerdctl 学习中的最大特点和最大坑点。只要把这点牢记,Containerd 的日常使用体验会顺很多。