容器/存储: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

CHERIBSD:FreeBSD 硬件内存安全革命已从论文走进现实CHERIBSD 是 CHERI(Capability Hardware Enhanced RISC Instructions)生态系统的操作系统层,源自剑桥大学与 SRI International 长达十年的研究项目。它通过修改 FreCHERI LLVM分支:硬件能力如何重塑AI时代的内存安全ctsrd-cheri/llvm-project代表了基于能力的安全从学术研究到实际部署的关键桥梁。CHERI最初由剑桥大学开发,通过硬件能力扩展传统RISC架构——这些能力本质上是不可伪造的令牌,在细粒度级别管理内存访问权限。该LLVM分先进核能复制研究:PyPSA与Snakemake为能源建模注入可复现性euronion/advanced_nuclear_reproduction_study 代码库是对能源系统建模领域可复现性危机的直接回应。它使用开源框架 PyPSA(Python 电力系统分析库)和 Snakemake(工作流管理系统),查看来源专题页GitHub 已收录 1239 篇文章

时间归档

April 20262997 篇已发布文章

延伸阅读

containers/common:红帽容器帝国的隐形中枢一个仅有238颗星标的GitHub仓库,正悄然指挥着数百万容器的行为。containers/common是红帽容器生态系统的共享基础设施层,统一了Podman、Buildah和Skopeo的配置、策略与库代码。AINews深度剖析:为何这个CHERIBSD:FreeBSD 硬件内存安全革命已从论文走进现实CHERIBSD 将 FreeBSD 移植到 CHERI-RISC-V 与 Arm Morello 平台,通过硬件强制的能力模型,在架构层面彻底消灭整类内存安全漏洞。这不是一次软件补丁,而是对操作系统管理指针与权限方式的根本性重构。CHERI LLVM分支:硬件能力如何重塑AI时代的内存安全LLVM编译器基础设施的一个专门分支,正将硬件强制内存安全引入主流开发。ctsrd-cheri/llvm-project将CHERI(能力硬件增强RISC指令)能力直接集成到工具链中,有望在硬件-软件边界消除整类内存破坏漏洞。先进核能复制研究:PyPSA与Snakemake为能源建模注入可复现性一项全新的开源代码库,用模块化现代工具重写了2022年关于先进核能系统的里程碑式研究,取代了原有的专有代码。此举或将为能源建模与政策分析的透明度树立新标杆。

常见问题

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,这说明它在开源社区具有较强讨论度和扩散能力。