补充说明
buildah 命令 是红帽主导的容器构建工具,属于 containers 工具套件(与 podman、skopeo 配套)。它不需要运行 Docker daemon 或任何守护进程,直接在宿主机上通过内核特性构建 OCI 格式的容器镜像,适合在无 root 权限或轻量 CI 环境中使用。
buildah 支持两种构建方式:buildah bud(Build Using Dockerfile,与 docker build 对应)和 buildah build(后者的别名,新版默认命令);也支持通过 buildah from + buildah copy + buildah commit 以脚本方式逐层组装镜像。构建出的镜像可以配合 podman 运行,或用 buildah push 推送到 registry。
典型使用场景:在 CI/CD 流水线中构建镜像而不引入 Docker daemon;配合 podman 在同一主机上完成“构建-运行”一体化工作流;用 buildah unshare 在 rootless 模式下构建。注意事项:rootless 构建需要用户命名空间支持(如 Ubuntu 需开启 kernel.unprivileged_userns_clone);buildah bud 在新版本中逐渐统一为 buildah build。
语法
buildah [选项] 子命令 [参数]
选项
buildah build/bud 常用选项:
--build-arg=键=值 # 传入 Dockerfile 中 ARG 的环境变量
-f, --file=路径 # 指定 Dockerfile(默认找当前目录 Dockerfile)
-t, --tag=镜像名 # 指定镜像标签,可多次使用
--layers # 使用缓存层加速增量构建
--no-cache # 不使用构建缓存
--platform=平台 # 指定目标平台,如 linux/amd64
实例
# 用当前目录的 Dockerfile 构建镜像并打标签
buildah build -t myapp:v1 .
# 指定 Dockerfile 路径并传入构建参数
buildah bud -f Dockerfile.dev --build-arg=ENV=prod -t myapp:prod .
# 从基础镜像创建容器,复制文件后提交为新镜像
ctr=$(buildah from alpine:latest)
buildah copy "$ctr" ./app /app
buildah commit "$ctr" myapp:v2
# 查看镜像列表与删除镜像
buildah images
buildah rmi myapp:v1
# 推送镜像到 registry
buildah push myapp:v1 docker://registry.example.com/myapp:v1