构建容器镜像利器:BuildKit安装

简介

BuildKit 是由 Moby 项目推出的一个新型构建引擎,旨在提升容器镜像构建的速度、效率和安全性。它最初作为 Docker 引擎的可选组件引入,但现在已经成为现代容器化应用构建的首选工具之一。

BuildKit 的优点

并行构建

BuildKit 支持并行构建,可以同时执行多个步骤,这显著缩短了构建时间。传统的 Docker 构建是按顺序执行每一步,而 BuildKit 则可以分析依赖关系,并行处理独立的任务。

缓存管理

BuildKit 提供了更智能的缓存管理机制,可以跨构建共享缓存,减少了重复下载和重复构建的开销。它可以在不同的构建步骤之间共享中间结果,大幅提升构建效率。

可扩展性

BuildKit 的设计高度模块化,可以轻松扩展和定制。开发者可以根据特定需求添加新的构建功能和特性,使其更加灵活和强大。

安全性

BuildKit 提供了更高的安全性支持,例如内联构建秘密(build secrets)和内联 SSH 密钥,使得敏感信息在构建过程中不易泄露。

跨平台支持

BuildKit 原生支持多平台构建,可以在不同的操作系统和架构上生成镜像。例如,可以在 x86 平台上构建 ARM 镜像,极大地方便了跨平台应用的开发和部署。

与 Docker 的比较

构建速度

使用 BuildKit 可以显著提升镜像构建速度,尤其是在处理复杂的多步骤构建任务时,得益于其并行处理和高级缓存机制。

镜像大小

BuildKit 的高级优化技术可以生成更小、更高效的镜像,减少不必要的文件和层级,使得镜像更精简。

构建过程中的安全性

相比 Docker 的传统构建方式,BuildKit 提供了更安全的构建环境,通过支持构建秘密和内联 SSH 密钥,确保敏感数据的安全性。

安装使用

下载buildkit

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

修改PATH环境变量

# 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量

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
使用下面的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 -

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值