# 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
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
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
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
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