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
。 - 服务端
-
安装
buildkit
mkdir -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
启动
buildkitd
systemctl 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 在镜像构建、镜像容器方面的管理功能了。 -