podman-container-tools/buildah

GitHub: podman-container-tools/buildah

Buildah 是一个无需守护进程的 OCI 容器镜像构建工具,支持通过 Dockerfile 或脚本化方式灵活创建镜像。

Stars: 8888 | Forks: 906

![buildah logo (light)](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/df614a69f6040024.png) ![buildah logo (dark)](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/41ca5ddc9d040029.png) # [Buildah](https://www.youtube.com/embed/YVk5NgSiUw8) - 一个方便构建 [Open Container Initiative (OCI)](https://www.opencontainers.org/) 容器镜像的工具 [![Go Report Card](https://goreportcard.com/badge/github.com/containers/buildah)](https://goreportcard.com/report/github.com/containers/buildah) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/10579/badge)](https://www.bestpractices.dev/projects/10579) Buildah 软件包提供了一个命令行工具,可用于: * 创建一个工作容器,可以从零开始,也可以使用一个镜像作为起点 * 创建一个镜像,可以从工作容器创建,也可以通过 Dockerfile 中的指令创建 * 镜像可以构建为 OCI 镜像格式或传统的上游 docker 镜像格式 * 挂载工作容器的 root 文件系统以便进行操作 * 卸载工作容器的 root 文件系统 * 使用容器 root 文件系统更新后的内容作为文件系统层来创建新镜像 * 删除工作容器或镜像 * 重命名本地容器 ## 开发者的 Buildah 信息 有关博客、发布公告及更多内容,请查看 [buildah.io](https://buildah.io) 网站! **[Buildah 容器镜像](https://github.com/containers/image_build/blob/main/buildah/README.md)** **[Buildah 演示](demos)** **[更新日志](CHANGELOG.md)** **[贡献](CONTRIBUTING.md)** **[开发计划](developmentplan.md)** **[安装说明](install.md)** **[故障排除指南](troubleshooting.md)** **[教程](docs/tutorials)** ## Buildah 与 Podman 的关系 Buildah 和 Podman 是两个互补的开源项目,它们 可在大多数 Linux 平台上使用,这两个项目都托管在 [GitHub.com](https://github.com),其中 Buildah 在[这里](https://github.com/containers/buildah),Podman 在[这里](https://github.com/containers/podman)。Buildah 和 Podman 都是 处理 Open Container Initiative (OCI) 镜像和 容器的命令行工具。这两个项目的区别在于它们的专业领域。 Buildah 专注于构建 OCI 镜像。Buildah 的命令复制了 Dockerfile 中的所有 命令。这允许在有或没有 Dockerfiles 的情况下构建镜像,而不需要任何 root 权限。 Buildah 的最终目标是提供一个更低级别的 coreutils 接口来 构建镜像。在没有 Dockerfiles 的情况下构建镜像的灵活性允许 将其他脚本语言集成到构建过程中。 Buildah 遵循简单的 fork-exec 模型,不作为 daemon 运行, 但它基于 golang 中全面的 API,该 API 可以被 打包到其他工具中。 Podman 专注于所有的帮助您维护和修改 OCI 镜像的命令和功能,例如拉取和打标签。它还允许您创建、运行和维护由 这些镜像创建的那些容器。对于通过 Dockerfiles 构建容器镜像,Podman 使用 Buildah 的 golang API,并且可以独立于 Buildah 安装。 Podman 和 Buildah 之间的一个主要区别在于它们对容器的概念。Podman 允许用户创建“传统容器”,这些容器的意图是 长期存在。而 Buildah 容器实际上只是为了允许将内容 添加回容器镜像而创建的。一个简单的理解方式是, `buildah run` 命令模拟了 Dockerfile 中的 RUN 命令,而 `podman run` 命令在功能上模拟了 `docker run` 命令。由于这一点以及它们底层的 存储差异,您无法在 Buildah 内部看到 Podman 容器,反之亦然。 简而言之,Buildah 是一种创建 OCI 镜像的高效方法,而 Podman 允许 您使用熟悉的容器 cli 命令在生产环境中 管理和维护这些镜像和容器。有关更多详细信息,请参阅 [容器工具指南](https://github.com/containers/buildah/tree/main/docs/containertools)。 ## 示例 来自 [`./examples/lighttpd.sh`](examples/lighttpd.sh): ``` $ cat > lighttpd.sh <<"EOF" #!/usr/bin/env bash set -x ctr1=$(buildah from "${1:-fedora}") ## 获取所有更新并安装我们的最小化 httpd 服务器 buildah run "$ctr1" -- dnf update -y buildah run "$ctr1" -- dnf install -y lighttpd ## 包含一些 buildtime 注解 buildah config --annotation "com.example.build.host=$(uname -n)" "$ctr1" ## 运行我们的服务器并暴露端口 buildah config --cmd "/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf" "$ctr1" buildah config --port 80 "$ctr1" ## 将此 container 提交为一个 image name buildah commit "$ctr1" "${2:-$USER/lighttpd}" EOF $ chmod +x lighttpd.sh $ ./lighttpd.sh ``` ## 命令 | 命令 | 描述 | | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | [buildah-add(1)](/docs/buildah-add.1.md) | 将文件、URL 或目录的内容添加到容器中。 | | [buildah-build(1)](/docs/buildah-build.1.md) | 使用 Containerfiles 或 Dockerfiles 中的指令构建镜像。 | | [buildah-commit(1)](/docs/buildah-commit.1.md) | 从工作容器创建镜像。 | | [buildah-config(1)](/docs/buildah-config.1.md) | 更新镜像配置设置。 | | [buildah-containers(1)](/docs/buildah-containers.1.md) | 列出工作容器及其基础镜像。 | | [buildah-copy(1)](/docs/buildah-copy.1.md) | 将文件、URL 或目录的内容复制到容器的工作目录中。 | | [buildah-from(1)](/docs/buildah-from.1.md) | 创建一个新的工作容器,可以从零开始,也可以使用指定的镜像作为起点。 | | [buildah-images(1)](/docs/buildah-images.1.md) | 列出本地存储中的镜像。 | | [buildah-info(1)](/docs/buildah-info.1.md) | 显示 Buildah 系统信息。 | | [buildah-inspect(1)](/docs/buildah-inspect.1.md) | 检查容器或镜像的配置。 | | [buildah-mount(1)](/docs/buildah-mount.1.md) | 挂载工作容器的 root 文件系统。 | | [buildah-pull(1)](/docs/buildah-pull.1.md) | 从指定位置拉取镜像。 | | [buildah-push(1)](/docs/buildah-push.1.md) | 将本地存储中的镜像推送到其他位置。 | | [buildah-rename(1)](/docs/buildah-rename.1.md) | 重命名本地容器。 | | [buildah-rm(1)](/docs/buildah-rm.1.md) | 删除一个或多个工作容器。 | | [buildah-rmi(1)](/docs/buildah-rmi.1.md) | 删除一个或多个镜像。 | | [buildah-run(1)](/docs/buildah-run.1.md) | 在容器内部运行命令。 | | [buildah-tag(1)](/docs/buildah-tag.1.md) | 为本地镜像添加一个额外的名称。 | | [buildah-umount(1)](/docs/buildah-umount.1.md) | 卸载工作容器的 root 文件系统。 | | [buildah-unshare(1)](/docs/buildah-unshare.1.md) | 在具有修改后 ID 映射的 user namespace 中启动命令。 | | [buildah-version(1)](/docs/buildah-version.1.md) | 显示 Buildah 版本信息 | **未来的目标包括:** * 更多的 CI 测试 * 额外的 CLI 命令 (?)
标签:EVTX分析, Go, Ruby工具, 容器技术, 文档结构分析, 日志审计, 请求拦截, 镜像构建