
Podman:一个用于管理 OCI 容器和 Pod 的工具
Podman(POD MANager)是一个用于管理容器和镜像、挂载到这些容器中的卷以及由容器组组成的 Pod 的工具。 Podman 在 Linux 上运行容器,但也可以使用 Podman 管理的虚拟机在 Mac 和 Windows 系统上运行。 Podman 基于 libpod,这是一个用于容器生命周期管理的库,也包含在此仓库中。libpod 库提供了用于管理容器、Pod、容器镜像和卷的 API。
Podman 每年发布 4 次新的主要版本或次要版本,分别在二月、五月、八月和十一月的第二周。补丁版本发布更为频繁,可能随时发生,以便将错误修复推送给用户。所有发布版本均经过 PGP 签名。被批准进行发布的团队成员的公钥位于此处。
只有最新版本的发布获得上游支持。在 Podman 主要版本发布后,有时会做出例外,以承认并非所有用户和发行版都能快速迁移到包含破坏性更改的版本。在 Podman 6.0 发布后,Podman 维护者决定将 v5.8 系列发布的上游支持延长至 2027 年 6 月的第二周,即 Podman 6.0 发布后的一年。此支持仅包括 CVE 修复和关键错误修复。
概述与范围
从高层次来看,Podman 和 libpod 的范围如下:
- 支持多种容器镜像格式,包括 OCI 和 Docker 镜像。
- 对这些镜像的完整管理,包括从各种来源拉取(包括信任与验证)、创建(通过 Containerfile 或 Dockerfile 构建,或从容器提交)以及推送到注册表和其他存储后端。
- 对容器生命周期的完整管理,包括创建(既可以从镜像创建,也可以从展开的根文件系统创建)、运行、检查点与恢复(通过 CRIU)以及移除。
- 使用 Netavark 对容器网络进行完整管理。
- 支持 pods,即共享资源并一起管理的一组容器。
- 支持在无 root 或其他提升权限的情况下运行容器和 pods。
- 容器和 pods 的资源隔离。
- 支持 Docker 兼容的 CLI 接口,该接口既可以在本地运行容器,也可以在远程系统上运行。
- 无管理器守护进程,以提升安全性并降低空闲时的资源利用率。
- 支持提供 Docker 兼容接口以及暴露高级 Podman 功能的改进接口的 REST API。
- 支持通过
podman machine运行的虚拟机在 Windows 和 Mac 上运行。
Roadmap
Podman 功能开发的未来可以在其 roadmap 中找到。
Communications
如果您认为已识别出项目中的安全问题,请切勿通过 GitHub issue 跟踪器、邮件列表或 IRC 公开报告该问题。
相反,请将尽可能多的详细信息通过电子邮件发送至 security@lists.podman.io。这是核心维护者的私有邮件列表。
对于一般性问题和讨论,请使用 Podman 的 频道。
对于围绕问题/错误和功能的讨论,您可以使用 GitHub 的 issues 和 PRs 跟踪系统。
还有一个位于 lists.podman.io 的邮件列表。
您可以通过向 podman-join@lists.podman.io 发送主题为 subscribe 的消息来订阅。
社区会议
所有 Podman 会议均向所有人开放,免费参加,并通过 CNCF/Linux Foundation 的 Zoom 举办。 完整日历可在 Podman Container Tools LFX 会议页面 上查看。 注册会议会向您发送该会议及所有后续定期实例的邀请。
| 会议 | 日程 | 形式 |
|---|---|---|
| Podman 社区会议 及其议程 | 偶数月(2月、4月、6月、8月、10月、12月)的第一个周二,东部时间上午 11:00(夏季 UTC-4 / 冬季 UTC-5) | 约 1 小时 — 演示、公告和社区更新 |
| Podman 周一办公时间 及其议程 | 每周一东部时间上午 10:00(夏季 UTC-4 / 冬季 UTC-5) | 30 分钟 — 技术讨论、开放话题 |
| Podman 周四办公时间 及其议程 | 每周四东部时间上午 11:00(夏季 UTC-4 / 冬季 UTC-5) | 30 分钟 — 技术讨论、开放话题 |
Rootless
Podman 可以轻松以普通用户身份运行,无需 setuid 二进制文件。
当以非 root 身份运行时,Podman 容器使用用户命名空间将容器内的 root 设置为运行 Podman 的用户。
Rootless Podman 运行受限容器,不具备运行该容器的用户所没有的特权。
其中一些限制可以解除(例如通过 --privileged),但 rootless 容器永远不会拥有比启动它的用户更多的特权。
如果您以您的用户身份运行 Podman 并从主机挂载 /etc/passwd,您仍然无法更改它,因为您的用户没有相应的权限。
几乎所有常规的 Podman 功能均可使用,但存在一些不足之处。 任何近期的 Podman 版本都应能够在无需额外配置的情况下以无 root 权限运行,但您的操作系统可能需要一些在安装指南中详述的额外配置。
在使用无 root 权限的 Podman 之前,需要管理员进行少量配置,必要的设置文档见此处。
Podman Desktop
Podman Desktop 为 Linux、Windows 和 Mac 机器上的 Podman 和 Kubernetes 提供本地开发环境。
它是 Podman 的全功能桌面 UI 前端,在非 Linux 操作系统上使用 podman machine 后端来运行容器。
它支持完整的容器生命周期管理(构建、拉取和推送镜像,创建和管理容器,创建和管理 pods,以及处理 Kubernetes YAML)。
该项目在 GitHub 上进行开发,欢迎贡献。
范围之外
OCI Projects Plans
Podman 使用 OCI 项目以及针对不同方面的最佳实践库:
- 运行时:我们使用 OCI 运行时工具 生成 OCI 运行时配置,这些配置可用于任何符合 OCI 标准的运行时,例如 crun 和 runc。
- 镜像:镜像管理使用 containers/image 库。
- 存储:容器和镜像存储由 containers/storage 管理。
- 网络:通过 Netavark 和 Aardvark 提供网络支持。无根网络通过 pasta 处理。
- 构建:构建通过 Buildah 支持。
- Conmon:Conmon 是一个用于监控 OCI 运行时的工具,被 Podman 和 CRI-O 共同使用。
- Seccomp:为 Podman、Buildah 和 CRI-O 提供统一的 Seccomp 策略。
Podman 开发者信息
有关博客、发布公告等更多内容,请访问 podman.io 网站!
安装说明 关于如何在您的环境中安装 Podman 的信息。
OCI Hooks 支持 关于 Podman 如何配置 OCI Hooks 以在启动容器时运行的信息。
Podman API 关于 Podman REST API 的文档。
Podman 命令 Podman 命令列表,包含指向其手册页的链接,在许多情况下还包含展示命令使用方法的视频。
Podman 容器镜像 关于在 quay.io 上找到的 Podman 容器镜像的信息。
Podman 故障排除指南 Podman 常见问题及解决方案列表。
Podman 使用迁移 对于使用 Podman 的基础设施,运维和开发迁移的有用信息。 本页 包含展示 Docker 命令及其对应 Podman 命令的表格。
教程 关于使用 Podman 的教程。
远程客户端 关于使用 Podman 远程客户端的简要指南。
在 Rootless 环境中 Podman 的基本设置和使用 一个展示运行 Rootless Podman 所需设置和配置的教程。
发布说明 近期 Podman 版本的发布说明。
贡献 关于如何为本项目做出贡献的信息。
Buildah 与 Podman 的关系
Buildah 和 Podman 是两个互补的开源项目,它们 在大多数 Linux 平台上均可用,且两个项目都位于 GitHub.com,其中 Buildah 位于此处,Podman 位于此处。 Buildah 和 Podman 都是 命令行工具,可处理 Open Container Initiative (OCI) 镜像和 容器。 这两个项目在专业领域上有所区别。
Buildah 专注于构建 OCI 镜像。 Buildah 的命令复制了 Dockerfile 中找到的所有命令。 这允许在有或没有 Dockerfile 的情况下构建镜像, 同时不需要任何 root 权限。 Buildah 的最终目标是提供一个用于构建镜像的低级 coreutils 接口。 在没有 Dockerfile 的情况下构建镜像的灵活性 允许将其他脚本语言集成到构建过程中。 Buildah 遵循简单的 fork-exec 模型,不作为守护进程运行, 但它基于 golang 中的全面 API,该 API 可以被 vendor 到其他工具中。
Podman 专注于所有帮助你维护和修改 OCI 镜像的命令和功能,例如拉取和打标签。 它还允许你创建、运行和维护那些 从这些镜像创建的容器。 对于通过 Dockerfile 构建容器镜像,Podman 使用 Buildah 的 golang API,并且可以独立于 Buildah 安装。
Podman 和 Buildah 之间的一个主要区别在于它们对容器的概念。Podman
允许用户创建“传统容器”,这些容器的意图是
长期运行。而 Buildah 容器实际上只是为了允许将内容
添加回容器镜像。一种简单的理解方式是
buildah run 命令模拟了 Dockerfile 中的 RUN 命令,而 podman run
命令在功能上模拟了 docker run 命令。由于这一点以及它们底层
存储的差异,你无法在 Buildah 中看到 Podman 容器,反之亦然。
简而言之,Buildah 是一种创建 OCI 镜像的高效方式,而 Podman 允许 你在生产环境中使用熟悉的容器 cli 命令来管理和维护这些镜像和容器。有关更多详细信息,请参阅 Container Tools Guide.
Podman Hello
$ podman run quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob a6b3126f3807 done
Copying config 25c667d086 done
Writing manifest to image destination
Storing signatures
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Project: https://github.com/containers/podman
Website: https://podman.io
Documents: https://docs.podman.io
Twitter: @Podman_io