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,