安装使用buildkit

1,739 阅读1分钟

下载buildkit

# 下载文件
wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz
# 创建解压的目录
mkdir /usr/local/buildkit
# 解压到指定的目录
tar -xf buildkit-v0.11.6.linux-amd64.tar.gz -C /usr/local/buildkit

修改PATH环境变量

echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile  # 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量
source /etc/profile  # 使刚才配置生效

创建buildkitd自启动服务

cat <<EOF > /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=buildkitd
After=network.target

[Service]
ExecStart=/usr/local/buildkit/bin/buildkitd

[Install]
WantedBy=multi-user.target
EOF

# 重新加载Unit file
systemctl daemon-reload
# 启动服务
systemctl start buildkitd
# 开机自启动
systemctl enable buildkitd

使用buildctl 打包镜像

编写一个Dockerfile

FROM alpine
RUN echo "built with BuildKit!" >  file
CMD ["/bin/sh"]

使用上面的Dockerfile构建镜像

# 将输出导出到本地tar包
# --local 用于将本地文件暴露给builder, context为构建的上下文环境,dockerfile为dockerfile文件位置
# --frontend 是运行在BuildKit内部的组件,并将构建的定义转为LLB,同时frontend也是BuildKit镜像repo源
buildctl build \
--frontend=dockerfile.v0 \
--local context=. \
--local dockerfile=. \
--output type=docker,name=myimage,dest=out.tar

# 可以看到当前目录生成了out.tar
[root@master ~]# ls out.tar 
out.tar

# 将out.tar导入到containerd中的某个命名空间下
ctr -n test image import out.tar

# 查看镜像
[root@master ~]# ctr -n test image ls
REF                              TYPE                                                 DIGEST                                                                  SIZE    PLATFORMS   LABELS 
docker.io/library/myimage:latest application/vnd.docker.distribution.manifest.v2+json sha256:27817447c583499d123a6a84880f04219bc201042b2ca723587a769151e2dece 3.2 MiB linux/amd64 -
# 也可以直接将生成的镜像导入进containerd
[root@master ~]# buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=docker,name=myimage1 | ctr -n test image import -

参考文档