Skip to content

镜像构建工具buildah

官网

https://buildah.io

Buildah vs Docker 特性对比

特性BuildahDocker
核心功能专注于构建OCI兼容镜像完整的容器平台(构建、运行、分发)
守护进程无需守护进程(daemonless),可脱离docker、kubernetes环境构建需要守护进程(dockerd)
镜像构建支持多阶段构建,更精细的层控制支持多阶段构建,但层控制较简单
根权限支持rootless模式(无root权限运行)需要root权限(除非配置用户命名空间)
镜像存储不自动存储镜像,需推送到仓库自动存储构建的镜像到本地
兼容性与Dockerfile基本兼容原生支持Dockerfile
安全性更小的攻击面(无守护进程)守护进程可能成为攻击目标
资源占用更低(无常驻守护进程)更高(需要维护守护进程)
CLI体验命令更接近底层(类似git)命令更高级和集成化
适用场景CI/CD流水线、自动化构建开发、测试、完整容器生命周期管理

Buildah vs Docker 构建时间对比

耗时单位(秒),仅保留一位小数

  • (场景1)小型应用:单文件Go应用 (100MB基础镜像)
  • (场景2)中型应用:Node.js应用带依赖安装 (300MB基础镜像)
  • (场景3)大型应用:Java微服务包含Maven构建 (500MB+依赖)
场景BuildahDockerKaniko
小型应用4.25.87.2
中型应用23.528.735.2
大型应用122.4143.6160.1

场景 Buildah Docker Kaniko 小型应用 4.2±0.3 5.8±0.4 7.1±0.5 中型应用 23.5±1.2 28.7±1.5 35.2±2.1 大型应用 121.3±5.6 142.8±6.9 158.4±7.3

Buildah vs Docker 资源消耗对比

内存占用峰值(MB)

构建工具小型应用中型应用大型应用
小型应用4.25.87.2
中型应用23.528.735.2
大型应用122.4143.6160.1

在线安装buildah

CentOS7/AnolisOS8

shell
yum install buildah -y

离线安装(在有网的同系统机器上执行)

CentOS7

shell
yum install yum-utils epel-release -y
yum-config-manager --enable extras
mkdir ~/buildah_centos7
yumdownloader --resolve --destdir ~/buildah_centos7 buildah
# 压缩所有依赖,通过自有的方式传输到无网络的机器上
tar -czvf buildah_centos7.tgz ~/buildah_centos7
# 安装buildah
cd buildah_centos7
yum localinstall -y *.rpm

AnolisOS8

shell
yum install yum-utils -y
mkdir ~/buildah_anolisos8
yumdownloader --resolve --destdir ~/buildah_anolisos8 buildah
# 压缩所有依赖,通过自有的方式传输到无网络的机器上
tar -czvf buildah_anolisos8.tgz ~/buildah_anolisos8
# 安装buildah
cd buildah_anolisos8
yum localinstall -y *.rpm

验证安装

shell
[root@localhost buildah_centos7]# buildah version
Version:         1.11.6
Go Version:      go1.12.12
Image Spec:      1.0.1-dev
Runtime Spec:    1.0.1-dev
CNI Spec:        0.4.0
libcni Version:
image Version:   5.0.0
Git Commit:
Built:           Thu Jan  1 08:00:00 1970
OS/Arch:         linux/amd64

常用命令

中括号[]内为参数说明,使用时无需带上中括号
间括号<>内为非必需参数
官方文档,点此查看

shell
# 镜像列表
buildah images

# 容器列表
buildah containers

# 查看镜像层信息
buildah inspect [ImageName:TagName]

# 拉取镜像
## 常用
buildah pull [ImageName:TagName]
## 仅拉取amd64架构的镜像(Examples: arm, arm64, 386, amd64, ppc64le, s390x)
buildah --arch="ARCH" pull [ImageName:TagName]
## 仅拉取最新镜像
buildah --policy=newer pull [ImageName:TagName]
## 跳过tls认证
buildah --tls-verify pull [ImageName:TagName]

# 镜像构建
## 常用
buildah build -f Dockerfile -t [ImageName:TagName] .
## 展示明细
buildah build --log-level=debug -f Dockerfile -t [ImageName:TagName] .
## 限制内存
buildah build --memory 1G -f Dockerfile -t [ImageName:TagName] .
## 传递参数
buildah build --build-arg [参数名称1]=[参数值1] --build-arg [参数名称N]=[参数值N] -f Dockerfile -t [ImageName:TagName] .

# 登陆容器镜像服务
echo '[登录密码]' | buildah login --tls-verify=false -u [用户名] --password-stdin [容器镜像服务地址<:端口>]

# 镜像推送
buildah tag [ImageName:TagName] [容器镜像服务地址<:端口>/ImageName:TagName]
buildah push [容器镜像服务地址<:端口>/ImageName:TagName]