# 007镜像构建工具buildah

# 官网

https://buildah.io (opens new window)

# Buildah vs Docker 特性对比

特性 Buildah Docker
核心功能 专注于构建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+依赖)
场景 Buildah Docker Kaniko
小型应用 4.2 5.8 7.2
中型应用 23.5 28.7 35.2
大型应用 122.4 143.6 160.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.2 5.8 7.2
中型应用 23.5 28.7 35.2
大型应用 122.4 143.6 160.1

# 在线安装buildah

# CentOS7/AnolisOS8

yum install buildah -y
1

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

# CentOS7

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
1
2
3
4
5
6
7
8
9

# AnolisOS8

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
1
2
3
4
5
6
7
8

# 验证安装

[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
1
2
3
4
5
6
7
8
9
10
11

# 常用命令

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

# 镜像列表
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]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
最近更新: 2025-09-04
2017 - 武林秘籍   |