导语:希望在服务器上直接构建containerd的镜像并直接调试使用。

采用nerdctl的好处,可以直接在服务器上构建并直接给k8s使用。nerdctl使用方式和docker基本一致,commit命令相对无脑可以给开发用。

验证使用nerdctl构建containerd镜像

前置条件已经安装了containerd 。nerdctl pull的镜像会存在/var/lib/containerd ,nerdctl push 的认证和docker共用。

wget -c https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-1.7.7-linux-amd64.tar.gz
tar zxvf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/local/bin/


echo 'source <(nerdctl completion bash)' >> /etc/profile
# 重新加载 /etc/profile 文件
source /etc/profile

如果要用nerdctl build 命令需要安装buildkit

下载

mkdir tmp && cd tmp
wget -c https://github.com/moby/buildkit/releases/download/v0.17.0-rc1/buildkit-v0.17.0-rc1.linux-arm64.tar.gz
tar zxvf buildkit-v0.17.0-rc1.linux-arm64.tar.gz
cp -rf bin/* /usr/bin

安装配置

cat > /lib/systemd/system/buildkit.socket <<EOF
#######################################
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660

[Install]
WantedBy=sockets.target
EOF

cat >/lib/systemd/system/buildkit.service <<EOF
#########################################
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true

[Install]
WantedBy=multi-user.target
EOF

systemctl enable buildkit.service
systemctl start buildkit.service

systemctl  status buildkit.service
systemctl  status buildkit.socket

调整context大小

# error: failed to solve: Internal: rpc error: code = Internal desc = received 4294967292-bytes data exceeding the limit 262244 bytes
mkdir -p /etc/buildkit/
cat > /etc/buildkit/buildkitd.toml <<EOF
[worker]
max_context_size = 42949672960 # 设置为40GB,或根据需要调整
EOF
systemctl  restart buildkit.service

构建镜像

# nerdctl build的镜像可以用ctr -nk8s.io images ls 查看到
nerdctl build -t harbor.deepwise.com/dev/kylinv10-lung:CTA_v20241022  . --no-cache
nerdctl push harbor.deepwise.com/dev/kylinv10-lung:CTA_v20241022

image-20241022140655609

补充

构建可能会出现的报错

buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=image,name=k8s.io/base/kylinv10-lung:lung_nodule_v20241022

image-20241022112717211

使用buildctl有一点不好就是构建的镜像不是在k8s.io下,无法给k8s直接使用,还需要导出一下或者push一下

image-20241022112950725

查看

ctr -n buildkit i ls

image-20241022114101844

docker和containerd的版本有要求,低版本会出现这个报错

image-20241022154515489

nerdctl commit

在官方nginx的镜像里安装一个vim进行测试

image-20241023103628127

测试commit的镜像是否带vim

image-20241023103705819

参考文档:

https://www.cnblogs.com/chen2ha/p/17086900.html

https://github.com/containerd/nerdctl

https://github.com/containerd/nerdctl/releases/tag/v1.7.7

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐