buildkit工具来构建ctr(containerd)镜像

前言:ctr不能像docker那样可以通过docker commit 容器id或者docker build (dockerfile)这样去直接构建镜像。(本地可以同时存在containerd和docker,但ctr不能在本地直接使用docker的镜像)

用Dockerfile构建ctr镜像:
1.通过安装buildkit工具来构建镜像(前置条件:本地已经安装好containerd环境)
—centos安装containerd,本地已有docker的情况,我直接使用的yum install containerd安装
下载buildkit包,在GitHub下载或者找国内其他人分享的包

https://github.com/moby/buildkit/releases

页面如下:linux 的x86系统找amd的就行。
在这里插入图片描述
下载好,解压后是个bin文件,这里我解压到至/usr/local/目录:

tar zxvf buildkit-v0.10.3.linux-amd64.tar.gz -C /usr/local/bin/
ln -s /usr/local/bin/bin/buildkit /usr/local/bin/buildkit
#通过软连接的方式把buildkit配置到/usr/local/bin 
ln -s /usr/local/bin/bin/buildkitd /usr/local/bin/buildkitd
#通过软连接的方式把buildkitd配置到/usr/local/bin 

配置buildkit的启动文件(buildkit.socket、buildkit.service)到systemd进行管理
创建文件: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 --addr tcp://localhost:1234
#--oci-worker=false 和 --containerd-worker=true 表示使用 containerd 作为 buildkit 的后端 worker
#--addr tcp://localhost:1234 表示监听 localhost:1234 端口和客户端通信
[Install]
WantedBy=multi-user.target

创建文件:vim /etc/systemd/system/buildkit.socket --填如下内容:

[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

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

[Install]
WantedBy=sockets.target

配置内容查看启动服务:

systemctl daemon-reload #重加载systemd的服务配置
systemctl enable buildkit --now	#开机自启动buildkit服务
systemctl start buildkit #开启服务
systemctl status buildkit.service #查看service服务是否正常
systemctl status buildkit.socket #查看socket服务是否正常

2.服务启动成功后,vi Dockerfile 进行编写构建:
eg:

FROM nginx
#RUN echo "11"
RUN echo "6666666"

进行build创建镜像。

buildctl --addr tcp://localhost:1234 build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=image,name=nginx:latest

构建过程如果如下错误:standard_init_linux.go:228: exec user process caused: permission denied
在这里插入图片描述
解决:vi /etc/selinux/config ,把SELINUX的值改为disable,==》SELINUX=disabled,然后重启机器。
之后重启构建Dockerfile成功了,如下:
在这里插入图片描述

构建成功之后镜像保存在buildkit命令空间下,通过ctr -n buildkit i ls可以查看生成的镜像
在这里插入图片描述

通过nerdctl的命令(build和commit)构建镜像。。
1.安装nerdctl,

Logo

鸿蒙生态一站式服务平台。

更多推荐