Containerd命令行工具-nerdctl
习惯了使用 docker cli,ctr 使用起来可能还是不太顺手,为了能够让大家更好的转到 containerd 上面来,社区提供了一个新的命令行工具:nerdctl。nerdctl 是一个与 docker cli 风格兼容的 containerd 客户端工具,而且直接兼容 docker compose 的语法的.
安装
wget https://github.com/containerd/nerdctl/releases/download/v1.6.2/nerdctl-1.6.2-linux-amd64.tar.gz
# 如果有限制,也可以替换成下面的 URL 加速下载
# wget https://download.fastgit.org/containerd/nerdctl/releases/download/v1.6.2/nerdctl-1.6.2-linux-amd64.tar.gz
# 最下化安装
tar Cxzvvf /usr/local/bin nerdctl-1.6.2-linux-amd64.tar.gz

命令
-
run
nerdctl run和docker run类似 可以使用nerdctl run命令运行容器nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:alpine
-
exec
nerdctl exec -it nginx /bin/sh
-
ps
使用
nerdctl ps命令可以列出所有容器nerdctl ps
同样可以使用
-a选项显示所有的容器列表,默认只显示正在运行的容器,不过需要注意的是nerdctl ps命令并没有实现docker ps下面的--filter、--format、--last、--size等选项 -
inspect
显示结果和
docker inspect基本一致nerdctl inspect nginx -
logs
–tail 5 : 从最后5行开始显示
nerdctl logs -f nginx --tail 5
-
stop
nerdctl stop nginx
-
rm
nerdctl rm nginx
rm不能直接杀掉正在运行的容器 要想杀掉正在运行的容器需要加上
-f强制删除 -
images
nerdctl images
-
pull
nerdctl pull busybox
-
tag
nerdctl tag busybox registry.cn-hangzhou.aliyuncs.com/tianchunhui/busybox:231016
-
push
推送镜像之前也可以使用
nerdctl login命令登录到镜像仓库,然后再执行 push 操作nerdctl push registry.cn-hangzhou.aliyuncs.com/tianchunhui/busybox:231016

-
save
nerdctl save -o busybox.tar.gz busybox:latest
-
rmi
nerdctl rmi busybox
-
load
使用
-i或--input选项指定需要导入的压缩包nerdctl load -i busybox.tar.gz
-
build
ctr并没有构建镜像的命令,而现在又不使用 Docker 了,nerdctl提供了nerdctl build这样的镜像构建命令-
新建一个如下的
Dockerfile文件FROM nginx RUN echo 'Hello Nerdctl From Containerd' > /usr/share/nginx/html/index.html -
在文件所在目录执行镜像构建命令
nerdctl build -t nginx:nerdctl -f Dockerfile .
可以看到有一个错误提示,需要安装
buildctl并运行buildkitd,这是因为nerdctl build需要依赖buildkit工具buildkit 项目也是 Docker 公司开源的一个构建工具包,支持 OCI 标准的镜像构建。它主要包含以下部分:
- 服务端
buildkitd:当前支持 runc 和 containerd 作为 worker,默认是 runc,我们这里使用 containerd - 客户端
buildctl:负责解析 Dockerfile,并向服务端 buildkitd 发出构建请求
buildkit 是典型的 C/S 架构,客户端和服务端是可以不在一台服务器上,而
nerdctl在构建镜像的时候也作为buildkitd的客户端,所以需要我们安装并运行buildkitd。 - 服务端
-
安装
buildkitmkdir -p /opt/nerdctl cd /opt/nerdctl wget https://github.com/moby/buildkit/releases/download/v0.12.2/buildkit-v0.12.2.linux-amd64.tar.gz tar -zxvf buildkit-v0.12.2.linux-amd64.tar.gz cp buildctl /usr/local/bin cp buildkitd /usr/local/bin使用 Systemd 来管理
buildkitd,创建如下所示的systemd unit文件:vim /etc/systemd/system/buildkit.service [Unit] Description=BuildKit Documentation=https://github.com/moby/buildkit [Service] ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true [Install] WantedBy=multi-user.target启动
buildkitdsystemctl daemon-reload systemctl enable buildkit --now systemctl status buildkit
-
重新执行构建命令
nerdctl build -t nginx:nerdctl -f Dockerfile .
单机环境下使用 Docker Compose,在 containerd 模式下,也可以使用
nerdctl来兼容该功能。同样可以使用nerdctl compose、nerdctl compose up、nerdctl compose logs、nerdctl compose build、nerdctl compose down等命令来管理 Compose 服务。这样使用 containerd、nerdctl 结合 buildkit 等工具就完全可以替代 docker 在镜像构建、镜像容器方面的管理功能了。 -