云原生【免费下载链接】buildahA tool that facilitates building OCI images.项目地址https://gitcode.com/gh_mirrors/bu/buildah点击查看免费下载Buildah 是一个用于构建 OCIOpen Container Initiative容器镜像的命令行工具与 Go 库核心定位与项目描述一致A tool that facilitates building OCI images。本文以仓库根目录的 CHANGELOG.md 为主体档案对照 cmd/buildah、imagebuildah、copier、internal/mkcw 等核心源码与 tests 测试体系系统梳理 Buildah 从 2017 年首个提交到 v1.45.02026-07-30的技术演进脉络。读完本文你将掌握 Buildah 的命令体系、构建引擎、缓存机制、可复现构建与供应链安全能力的历史来源与现状以及如何通过 CHANGELOG 反向追踪这些能力在仓库中的落地位置。一、CHANGELOG 概况一份横跨九年的版本档案CHANGELOG.md 共 4207 行记录了从0.0 - 2017-01-26Initial version, needs work到v1.45.0 (2026-07-30)的完整版本历史。其条目组织方式非常稳定每个版本小节下列出该周期内的全部合并提交commit message 的摘要格式统一、可直接对应到 git 历史。1.1 版本节奏与三驾马车依赖同步观察整个文档可以发现一个贯穿始终的规律几乎每个正式版本的第一条记录都是对三大底层依赖的同步升级例如v1.45.0Bump to c/storage 1.64.0, c/image 5.41.0, c/common v0.69.0v1.44.0Bump c/common to v0.68.0, c/image v5.40.0, c/storage v1.63.0v1.42.0Bump to storage v1.61.0, image v5.38.0, common v0.66.0这三大依赖分别是容器存储库containers/storage负责镜像分层与本地存储、容器镜像库containers/image负责镜像传输与格式转换和容器公共库containers/common负责配置、网络、seccomp 等通用能力。Buildah 的发布节奏与它们紧密绑定这也解释了为什么版本号升级周期并非严格固定依赖就绪即发版。值得注意的里程碑是 v1.42.0 的 Switch common, storage and image to monorepo三大库此后以 go.podman.io 单一仓库的形式演进当前 go.mod 中的依赖路径如go.podman.io/image/v5、go.podman.io/storage即印证了这一迁移。1.2 版本号与源码的对应关系CHANGELOG 中每个版本小节末尾通常有 Bump to vX.Y.0-dev 记录表示发布后立即将开发版本号推入下一个迭代。当前仓库的 define/types.go 中定义Version 1.46.0-dev与 CHANGELOG 止于 v1.45.0、随后进入 v1.46.0 开发周期的状态完全吻合。用户可通过buildah version命令实现在 cmd/buildah/version.go查看版本信息输出包括 Version、Go Version、Image Spec、Runtime Spec 等字段。1.3 主要版本一览版本日期代表性能力v1.45.02026-07-30阶段昵称去重、FROM --after、mount-sshfs/umount-sshfs、serve-sftp、copier.Symlinkv1.44.02026-05-27--compression-format、--valid-exit-codes、COPY/ADD --exclude 模式、--metadata-file、CNI 移除v1.42.02025-10-17依赖迁移至 monorepo、--transient-store、--imagestore、FROM --after 前置v1.41.02025-07-16ADD/COPY --link、--source-date-epoch/--rewrite-timestamp、zstd 压缩提交、--inherit-annotationsv1.39.02025-01-31--security-opt mask/unmask、chroot 优先尝试 pivot_root、--no-pivot-rootv1.38.02024-11-08COPY/ADD --exclude、manifest push --all 默认开启、ADD git 源v1.33.02023-11-17RUN/COPY/ADD heredoc 支持、ADD checksum 校验、--compat-auth-filev1.32.02023-09-14buildah mkcw 命令、commit/build --cw 机密工作负载v1.29.02023-01-25buildah prune 命令、--group-add、build --pullmissingv1.27.02022-08-01--cache-ttl、--cache-to/--cache-from 远程缓存、--usernsauto、--build-contextv1.24.02022-01-26buildkit 风格 --mountbind/cache/tmpfs、--all-platformsv1.23.02021-09-13bud 正式更名为 build保留别名、SSH RUN mountv1.21.02021-05-19secret 挂载、manifest rm 命令v1.16.02020-09-03--jobsN 并行构建、copier 包引入v1.11.42019-10-28manifest 命令家族引入v1.8.32019-06-04文件型 secret 挂载、.dockerignore 支持1.02018-05-06多阶段构建、buildah run 重构0.12017-06-14push/tag/inspect/run/add/copy 等基础命令成型早期版本号存在不规则的跳跃如 0.16.0 之后直接回到 0.5这是项目早期版本管理尚未稳定时的历史痕迹也侧面说明 CHANGELOG 忠实记录了真实的发布过程。二、核心命令体系从 bud 到 build从单体命令到完整工具链Buildah 的命令家族可以在 cmd/buildah 目录中一一对应。CHANGELOG 记录了这些命令的诞生与重构历程。2.1 构建命令bud → build0.12017-06-14新增build-using-dockerfile命令别名 bud这是buildah build的前身1.02018-05-06多阶段构建multi-stage builds支持落地这是现代 Containerfile 构建能力的基石v1.23.02021-09-13正式 Rename bud to build, while keeping an alias for to budbuildah build成为主命令bud保留为兼容别名。这与文档目录中 docs/buildah-build.1.md 的存在相互印证。2.2 镜像生命周期命令CHANGELOG 0.1 条目集中记录了基础命令的诞生push、tag、inspect、run基于 runc、add、copy、containers原名 list、rm原名 delete、config、commit、mount/umount。此后各版本持续打磨v1.19.0push 支持 manifest list 与 digest 推送v1.35.0commit 与 build 增加--sbom选项可在提交时扫描并生成 SBOMv1.44.0commit 与 build 增加--compression-format标志如 zstd并支持从 containers.conf 读取压缩格式回退配置v1.45.0Commit 增加EmptyLayerIfEmptyDiff标志——当 diff 为空时提交一个空层而不是含有空内容的层。2.3 manifest 与多架构清单v1.11.42019-10-28引入buildah manifest命令与 manifests 模块v1.19.0完善 manifest list 的 pushv1.38.0buildah manifest push --all默认开启v1.35.0manifest 增加 artifact 相关选项manifest add --artifactv1.44.0manifest create 支持--amend与--replace以更新非 list 镜像。这些能力与 cmd/buildah/manifest.go 一一对应用于构建和推送多架构multi-arch镜像列表。2.4 后续新增的命令族v1.22.0buildah source命令用于创建和管理 source 镜像对应 cmd/buildah/source.go 与 internal/sourcev1.29.0buildah prune命令暴露 CleanCacheMount API用于清理缓存挂载对应 cmd/buildah/prune.gov1.32.0buildah mkcw命令与 commit/build 的--cw选项用于生成机密计算confidential workload镜像v1.45.0新增mount-sshfs、umount-sshfsSSHFS 挂载/卸载与serve-sftpSFTP 服务对应 cmd/buildah/sftp.go命令。三、构建引擎imagebuildah 的能力演进构建引擎的核心实现在 imagebuildah 目录executor.go 负责多阶段调度stage_executor.go 负责单阶段执行。CHANGELOG 中大量条目围绕它展开。3.1 多阶段构建与 ARG 作用域1.02018-05-06多阶段构建支持v1.44.0 连续多条记录支持单条指令中多个 ARG、修复 build-arg 与 stage override header 的作用域顺序、修复 COPY/ADD--from与 stage 作用域 ARG 的配合v1.44.0Handle newFROM --afterflag for explicit stage dependencies允许显式声明阶段依赖v1.45.0 继续完善Handle duplicate stage nicknames、imagebuildah.executor.Build: index dependencyMap by position。这些细节的修复体现了多阶段构建在真实复杂 Containerfile 下的工程难度ARG 作用域、阶段别名与依赖顺序稍有不慎就会导致缓存失效或构建错误。3.2 多平台构建v1.24.0buildah build --all-platformsv1.23.0--platform支持列表值v1.42.0Handle taggeddigested references when processing --all-platformsv1.44.0新增--iidfile-raw与--metadata-file配合多平台构建输出更完整的元数据。3.3 构建缓存体系缓存是镜像构建性能的核心CHANGELOG 记录了完整的演进v1.24.0 之前--layers、--no-cache、内容摘要缓存v1.27.0--cache-ttl按时长过滤缓存、--cache-to/--cache-from向远程源分发/拉取缓存v1.29.0远程缓存支持多个 source 与 destinationv1.44.0Fix stale cache when using bind mount with build stage、增加缓存诊断日志v1.45.0imagebuildah: default RUN --mount type to bind for cache checksums、imagebuildah.executor.Build: index dependencyMap by position。测试端有大量对应验证例如 tests/bud.bats 中的 cache 相关用例以及 tests/bud/ 目录下的 cache-stages、cache-from-stage、cache-chown、cache-format 等测试数据目录。3.4 BuildKit 风格挂载--mountBuildah 从 v1.24.0 开始系统性地引入 BuildKit 兼容的RUN --mount能力--mounttypebindbuild: Add support for buildkit like --mounttypebind--mounttypecache含外部 cache store 锁定、按属主区分缓存位置--mounttypetmpfs含 tmpcopyup 选项v1.23.0SSH 类型的 RUN mountv1.21.0 起secret 挂载持续演进v1.44.0 支持--mounttypesecret,idfoo,envbar把 secret 注入为环境变量。对应实现分散在 internal/volumes、internal/parsevolume、imagebuildah 中测试数据位于 tests/bud/buildkit-mount 与 tests/bud/run-mounts。3.5 heredoc 与预处理器v1.33.0buildah: add heredoc support for RUN, COPY and ADD可在 Containerfile 中直接内嵌多行脚本/文件内容v1.36.0 起heredoc 摘要显示、内容变化时缓存失效stage_executor,layers: burst cache if heredoc content is changed更早的 v1.13.0 还支持.in后缀 Containerfile 的 C 预处理器CPP风格处理-cpp-flag。四、可复现构建与供应链安全这是 2024~2026 年间 CHANGELOG 反复出现的主题也是当前版本能力的重要卖点。4.1 可复现构建时间戳控制v1.41.0build: add --source-date-epoch and --rewrite-timestamp flags、commit: add --source-date-epoch and --rewrite-timestamp flagsv1.41.0 配套--source-date-epoch/--timestamp使用静态 hostname/cid并省略 identity labelv1.44.0Accept SOURCE_DATE_EPOCH as a build-argv1.44.0manifest push 增加--timestamp参数。这些机制让同一份源码在不同机器、不同时间构建出完全一致的镜像内容含 OCIcreated注解是可复现构建与供应链审计的基础。4.2 SBOM 生成v1.35.0build,commit: add --sbom to scan and produce SBOMs when committing配合 internal/sbom 包merge.go、presets.go可在构建/提交时自动扫描依赖并输出软件物料清单。4.3 机密计算工作负载mkcwv1.32.0Addbuildah mkcw, add--cwtobuildah commitandbuildah buildv1.35.0mkcw: populate the rootfs using an overlayv1.45.0internal/mkcw.GenerateMeasurement()直接 glob 查找 libkrunfw-sev.so。对应实现位于 internal/mkcwarchive.go、attest.go、entrypoint.go、luks.go、makefs.go、workload.go通过 LUKS 加密根文件系统与远程证明attestation机制将普通 OCI 镜像转换为机密虚拟机confidential VM可运行的工作负载镜像。4.4 签名、加密与安全选项v1.13.2--sign-bybud/commit/push、--remove-signaturespull/pushv1.15.0commit 加密实现以及 push/pull/bud/from 的加密/解密v1.38.0Document that zstd:chunked is downgraded to zstd when encryptingv1.39.0--security-opt mask与unmask支持v1.45.0修复--security-opt seccompprofile被静默忽略的问题、parse 阶段遵循 containers.conf 的 seccomp_profile。五、copier镜像内容操作的底层基础设施v1.16.02020-09-03引入 copier 包copier/copier.go此后成为 ADD/COPY/commit 内容操作的基础设施。CHANGELOG 记录了它的持续扩充v1.44.0copier: add Mkfile() for creating files with inline contentv1.45.0Copier: add Symlink() for creating symlinks with inline target、copier: add CreateDestPath option to PutOptions、copier: add PutOptions.Timestamp for timestamp override更早版本Mkdir、Remove、Ensure、ConditionalRemove、Get/Put 的 Glob 支持含**路径组件、NoOverwriteDirNonDir、StripSetuidBit 系列选项、Rename 等。copier 的职责是在容器根文件系统内安全、高效地执行文件复制、创建、删除与属性保留xattr、硬链接、owner其单元测试覆盖了 chroot 内外的行为copier/copier_linux_test.go、copier/copier_test.go。ADD/COPY 的--chown、--chmod、--linkv1.41.0、--excludev1.38.0、glob 与**匹配等能力全部建立在这层基础设施之上。六、运行时与隔离机制buildah run与构建阶段的 RUN 指令需要将命令放入隔离环境中执行CHANGELOG 记录了这部分的长期演进v1.39.0chroot: on Linux, try to pivot_root before falling back to chroot即默认优先使用 pivot_root对应 chroot 目录的 run_linux.go 实现v1.24.2--cgroup-manager全局选项v1.30.0run: add support for inline --network in RUN stmtv1.31.0pasta 网络支持配合 pkg/overlayrootless 场景从 slirp4netns 到 pasta从BUILDAH_ISOLATION环境变量到--usernsautov1.27.0v1.44.0 起逐步移除 CNIRemove runc/libcontainer/devices dependency、deprecate CNI configuration fields and remove CLI flags网络栈全面收敛到 containers/common。此外v1.45.0 的 chroot: skip setgroups when namespace denies it 与更早的 chroot: do not use setgroups if it is blocked 体现了在受限制的用户命名空间环境下的稳健性修复。七、工程化与测试体系CHANGELOG 同样忠实地记录了 Buildah 的工程质量投入这些可以从仓库中直接验证BATS 集成测试tests/ 目录下有 add.bats、bud.bats、commit.bats、copy.bats、run.bats、push.bats、pull.bats、manifest 相关等数十个 bats 测试文件配套 tests/helpers.bash 与 test_runner.shconformance 测试tests/conformance/conformance_test.go 用于对照 Docker/BuildKit 行为一致性测试数据在 tests/conformance/testdata静态检查golangci-lintv2 系列、codespell、gofmt、govet、modernize 等 linter 逐步启用Makefile 中make validate汇总这些检查CI 演进从 Travis、Cirrus CI 到 GitHub Actions Lima VMnew gha ci with lima并在 v1.44.0 将 contrib/ci 迁移到 hack/ci发布工具链rpm/buildah.spec 与 release.sh 维护 RPM 打包与版本发布。八、依赖生态与 Go 版本要求Go 版本要求随时代推进早期 1.10 → v1.22v1.38.0 update to go 1.22→ v1.24v1.42.0 Update expected/minimum version of Go to 1.24三大依赖库storage/image/common从独立仓库演进为 go.podman.io monorepov1.42.0v1.44.0Update to use shared configfile implementation配置解析与 containers/common 深度共享存储后端层面v1.31.0 Remove device mapper support、btrfs 与 vfs 驱动并存rootless 环境使用 fuse-overlayfs。九、总结从 CHANGELOG 读出的 Buildah 技术画像纵观这份 CHANGELOG可以提炼出 Buildah 三条清晰的技术主线以 OCI 为中心的纯粹定位始终聚焦构建 OCI 镜像这一件事所有命令与库 API 都围绕镜像的拉取、构建、提交、推送与清单管理展开与容器生态深度协同依赖 containers/common、image、storage 三库同步演进网络、存储、镜像格式等能力复用生态而非重复造轮子供应链安全与可复现性持续加码从 SBOM、签名加密、到 source-date-epoch 可复现构建、再到 mkcw 机密工作负载反映了容器镜像供应链安全从能构建到可信构建的行业演进。对于开发者而言CHANGELOG.md 不仅是版本档案更是一张引导你进入 cmd/buildah、imagebuildah、copier 与 internal 源码的路线图任何一条 changelog 记录都能在对应模块中找到它的实现与测试。当前仓库正处于 v1.46.0-dev 开发周期后续新特性会继续以相同格式沉淀进这份文档。赞分享云原生【免费下载链接】buildahA tool that facilitates building OCI images.项目地址https://gitcode.com/gh_mirrors/bu/buildah点击查看免费下载相关推荐解读 Buildah Roadmap季度里程碑与 OCI 镜像构建工具的演进路线解读 Buildah Roadmap季度里程碑与 OCI 镜像构建工具的演进路线 Buildah 的 ROADMAP.md https://link.gitc云原生balenaEtcher 版本演进全景解读从 CHANGELOG 与源码看跨平台镜像烧录工具十年迭代balenaEtcher 版本演进全景解读从 CHANGELOG 与源码看跨平台镜像烧录工具十年迭代 本文以仓库根目录下的 CHANGELOG.md http桌面应用开发工具智能硬件Buildah: OCI镜像构建工具Buildah: OCI镜像构建工具 1. 项目介绍 Buildah是一个开源命令行工具用于构建Open Container Initiative OCI 容云原生上一篇Muon SSH Terminal/SFTP 客户端常见问题解决方案下一篇BlenderMCPAI驱动3D建模的革命性解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?