容器/存储:Podman与Buildah崛起的隐形支柱

GitHub April 2026
⭐ 628
来源:GitHub归档:April 2026
Red Hat的containers/storage库是Podman和Buildah背后的静默引擎,负责管理镜像层、快照和挂载。AINews深度解析其架构、存储驱动权衡,以及为何这个底层库正成为容器生态的关键基础设施。

当Docker的统治地位频频登上头条时,让容器高效且可移植的底层存储机制却是一个不那么光鲜但绝对关键的层面。containers/storage,一个主要由Red Hat维护的Go语言库,为Podman、Buildah、CRI-O以及在企业级和Kubernetes环境中获得显著增长的其它容器工具提供了基础存储管理。该库抽象了与多种文件系统驱动(overlayfs、devicemapper、vfs和aufs)交互的复杂性,以管理容器镜像层、创建可写容器快照并处理挂载传播。其设计哲学是解耦:它不绑定任何特定的容器运行时或编排器,使其能够作为独立组件被广泛使用。

技术深度剖析

从核心来看,containers/storage是一个Go语言库,提供了用于管理容器镜像及其关联存储层的统一API。它本身并非存储系统,而是多个存储驱动之上的抽象层。该库的架构围绕三个关键概念展开:存储(stores)层(layers)容器(containers)

- 存储(Stores):`Store`是主要入口点,代表一个存储位置(通常是文件系统上的一个目录)。它管理着一个层和容器的图谱。默认位置对于rootful操作是`/var/lib/containers/storage`,对于rootless操作则是`~/.local/share/containers/storage`。
- 层(Layers):每个镜像由只读层组成。containers/storage使用图数据库(通常是JSON文件或像boltdb这样的数据库)来追踪这些层。当创建容器时,会使用写时复制(CoW)策略在镜像层之上创建一个可写层(快照)。
- 容器(Containers):容器本质上是一个由镜像层加上可写层组成的已挂载文件系统。该库处理挂载、卸载以及追踪容器的状态。

该库支持多种存储驱动,每种驱动具有不同的性能和兼容性特征:

| 驱动 | CoW机制 | 性能 | 稳定性 | 用例 |
|---|---|---|---|---|
| overlayfs(默认) | 内核overlayfs | 快速,低开销 | 非常稳定(内核 >= 4.x) | 通用,rootless容器 |
| devicemapper | 精简配置(LVM) | 中等,可能降级 | 在许多发行版中已弃用 | 遗留系统,旧版RHEL |
| vfs | 无CoW(完整拷贝) | 慢,高磁盘占用 | 稳定 | 测试,调试,非Linux环境 |
| aufs | 联合挂载 | 良好 | 已弃用,不在主线内核中 | 遗留Docker设置 |
| btrfs | 子卷快照 | 良好 | 稳定(如果使用btrfs) | 使用btrfs作为根文件系统的系统 |

数据要点: overlayfs作为默认驱动占据压倒性优势,这归功于其内核原生实现、低开销以及对rootless容器的出色支持。Devicemapper和aufs实际上已是遗留技术,它们在containers/storage中的持续支持更多是为了向后兼容,而非创新。

该库的架构刻意与容器运行时(如runc或crun)解耦。这意味着像Podman这样的工具可以使用containers/storage来拉取镜像、创建层和挂载文件系统,然后将已挂载的文件系统交给运行时执行进程。这种关注点分离是相对于Docker单体式方法的一个主要架构优势,在Docker中存储和运行时紧密耦合。

GitHub上的开源仓库(github.com/containers/storage)见证了稳定但非爆炸性的增长——目前约有628颗星,每日缓慢增加。这个适中的星标数掩盖了其重要性;它是一个基础库,许多更知名的项目都依赖于此。最近的提交集中在改进rootless存储性能、增加对idmapped mounts等新内核特性的支持,以及加固代码以抵御恶意镜像。

关键参与者与案例研究

Red Hat是containers/storage的主要维护者,关键维护者包括Dan Walsh和Nalin Dahyabhai,两人都是容器生态的长期贡献者。该库是Podman项目的核心组件,Podman已成为Red Hat的旗舰容器管理工具,定位为Docker的即插即用替代品,默认以rootless模式运行。另一个Red Hat工具Buildah使用containers/storage来构建容器镜像,无需完整的守护进程。

在Red Hat之外,该库还被以下项目使用:
- CRI-O:Kubernetes的轻量级CRI实现,依赖containers/storage进行镜像和层管理。
- Skopeo:用于处理远程镜像仓库的工具,使用该库进行本地存储操作。
- Buildah:用于从头开始或从Dockerfile构建镜像。
- Podman Machine:用于在macOS和Windows上运行Podman,在Linux虚拟机内使用containers/storage。

一个值得注意的案例是Podman在安全性和rootless操作至关重要的企业环境中的采用。例如,IBM CloudRed Hat OpenShift已集成Podman和CRI-O,利用containers/storage提供更安全的容器运行时。该库处理用户命名空间映射和idmapped mounts的能力对于rootless容器至关重要,而Docker直到最近才开始充分支持这一特性。

主要容器工具的存储后端对比:

| 工具 | 存储库 | 默认驱动 | Rootless支持 | 关键差异化优势 |
|---|---|---|---|---|
| Docker | containerd + Docker自有存储驱动 | overlay2 | 有限(需要配置) | 成熟,广泛生态 |
| Podman | containers/storage | overlayfs | 一流

更多来自 GitHub

Airbnb Lottie-Web:让动画工程民主化的开源利器,低端设备性能瓶颈成隐忧Lottie-web 是 Airbnb 开发的一款开源 JavaScript 库,能够在 Web、Android、iOS 和 React Native 上原生渲染 Adobe After Effects 动画。它通过解析由 BodymoviAI生成Lottie动画:DiffusionStudio如何重写动效设计规则DiffusionStudio/lottie是一个开源GitHub仓库,它架起了自然语言描述与专业级Lottie动画之间的桥梁。通过利用Anthropic的Claude Code和OpenAI的Codex等模型的代码生成能力,该工具能够解读Rufus:Windows USB启动的幕后英雄,GitHub星标突破3.6万Rufus是一款免费、开源的Windows应用程序,专为格式化U盘并从ISO镜像创建可启动介质而设计。其核心优势在于可靠性、速度和全面的功能集,支持从Windows和Linux ISO到UEFI启动模式及坏块检查等一切功能。由开发者Pete查看来源专题页GitHub 已收录 2632 篇文章

时间归档

April 20263042 篇已发布文章

延伸阅读

containers/common:红帽容器帝国的隐形中枢一个仅有238颗星标的GitHub仓库,正悄然指挥着数百万容器的行为。containers/common是红帽容器生态系统的共享基础设施层,统一了Podman、Buildah和Skopeo的配置、策略与库代码。AINews深度剖析:为何这个Airbnb Lottie-Web:让动画工程民主化的开源利器,低端设备性能瓶颈成隐忧Airbnb 推出的 Lottie-web 已悄然成为将设计师精心制作的复杂动画部署到生产环境的行业标准,无需编写一行动画代码。这个拥有 31,918 个 GitHub 星标的开源库,架起了 After Effects 艺术创作与跨平台工程AI生成Lottie动画:DiffusionStudio如何重写动效设计规则一个名为DiffusionStudio/lottie的全新开源项目,正借助Claude Code和Codex等AI代码生成模型,将自然语言提示直接转化为可用于生产的Lottie矢量动画。这款工具旨在让动效设计走向大众,有望颠覆UI/UX、营Rufus:Windows USB启动的幕后英雄,GitHub星标突破3.6万Rufus,这款用于格式化并创建可启动U盘的轻量级Windows工具,已悄然成为数百万用户的必备利器。凭借36,473个GitHub星标和每日944个的新增星标,我们深入剖析为何Pete Batard的这个开源项目能在IT专业人士和爱好者中

常见问题

GitHub 热点“Containers/Storage: The Unseen Backbone Powering Podman and Buildah's Rise”主要讲了什么?

While Docker's dominance often grabs headlines, the underlying storage mechanics that make containers efficient and portable remain a less glamorous but absolutely critical layer.…

这个 GitHub 项目在“containers/storage vs containerd snapshotter performance comparison”上为什么会引发关注?

At its core, containers/storage is a Go library that provides a unified API for managing container images and their associated storage layers. It is not a storage system itself but an abstraction layer over multiple stor…

从“how to use containers/storage library in Go for custom container engine”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 628,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。