一、由于containerd无法构建docker镜像,所以需要依赖buildkit来构建镜像,buildkit组成:
- 1.服务端为buildkitd,负责和runc或containerd后端连接干活,目前只支持这两个后端。
- 2.客户端为buildctl,负责解析镜像构建文件Dockerfile,并向服务端发出构建指令,所以客户端可以和服务端不在一台机器上,也不需要root权限之类。
- 3.服务端默认使用runc后端,但是建议使用containerd后端,这样构建出的镜像就会存在containerd的buildkit名字空间下。
二、部署
- 下载地址:buildkit
- 将下载好的文件解压后得到
bin文件夹,将bin文件夹中的二进制文件移动到/usr/local/bin文件夹下。
三、使用systemd管理buildkit
- 地址:examples/systemd/system
- 在
/usr/lib/systemd/system下分别创建buildkit.service、buildkit.socket两个文件,使用--oci-worker=false --containerd-worker=true参数,可以让buildkitd服务使用containerd后端。安装git命令,执行systemctl daemon-reload && systemctl start buildkit
- buildkit.service
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit
[Service]
Type=notify
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
[Install]
WantedBy=multi-user.target
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660
[Install]
WantedBy=sockets.target