跳到主要内容

一款用于管理OCI容器和pod的工具

许可证 GitHub最新发布(最新SemVer) Go Report Card


Podman(POD管理器)是一款用于管理容器和镜像、挂载到这些容器的卷以及由容器组创建的pod的工具。 Podman在Linux上运行容器,但也可以使用Podman管理的虚拟机在Mac和Windows系统上使用。 Podman基于libpod,一个用于容器生命周期管理的库,也包含在这个仓库中。libpod库提供用于管理容器、pod、容器镜像和卷的API。

所有发布版本都经过GPG签名。获准进行发布的团队成员的公钥位于此处

概述与范围

Podman和libpod的主要功能范围如下:

  • 支持多种容器镜像格式,包括OCI和Docker镜像。
  • 对这些镜像的全面管理,包括从各种来源拉取(包括信任和验证)、创建(通过Containerfile或Dockerfile构建,或从容器提交)、推送到注册中心和其他存储后端。
  • 对容器生命周期的全面管理,包括创建(既可以从镜像创建,也可以从爆炸式根文件系统创建)、运行、检查点保存与恢复(通过CRIU)以及删除。
  • 使用Netavark对容器网络进行全面管理。
  • 支持pod,即共享资源并一起管理的容器组。
  • 支持以非root或其他提升权限的方式运行容器和pod。
  • 容器和pod的资源隔离。
  • 支持与Docker兼容的CLI界面,可以在本地和远程系统上运行容器。
  • 不使用管理器守护进程,以提高安全性和空闲时的资源利用率。
  • 支持提供Docker兼容接口和改进接口(暴露高级Podman功能)的REST API。
  • 支持通过podman machine运行的虚拟机在Windows和Mac上运行。

发展路线图

  1. 进一步完善podman machine,以更好地支持Podman Desktop和其他开发者用例。
  2. 支持conmon-rs,这将改进容器日志记录。
  3. 支持BuildKit API。
  4. 性能和稳定性改进。
  5. 减小Podman二进制文件的大小。

联系方式

如果您认为在项目中发现了安全问题,请不要通过GitHub问题跟踪器、邮件列表或IRC公开报告该问题。 相反,请发送包含尽可能多的详细信息的电子邮件至security@lists.podman.io。这是一个核心维护人员使用的私有邮件列表。

对于一般的问题和讨论,请使用Podman的社区渠道

若要讨论问题/错误和功能,您可以使用GitHub的问题拉取请求跟踪系统。

还有一个位于lists.podman.io邮件列表。您可以通过向podman-join@lists.podman.io发送主题为subscribe的消息来订阅。

无特权模式

Podman可以轻松地以普通用户身份运行,无需设置setuid二进制文件。 当以非root用户身份运行时,Podman容器使用用户命名空间将容器内的root用户设置为运行Podman的用户。 无特权Podman以受限的方式运行容器,容器不会有比运行它的用户更多的权限。 即使您以您的用户身份运行Podman并将/etc/passwd从主机挂载到容器中,您仍然无法更改它,因为您的用户没有权限这样做。

几乎所有正常的Podman功能都是可用的,尽管存在一些局限性。 任何最近的Podman版本都应该能够无需任何额外配置即可以无特权模式运行,尽管您的操作系统可能需要一些额外的配置,这些配置在安装指南中有详细说明。

在使用无特权Podman之前,管理员需要进行一些配置,必要的设置文档位于此处

Podman Desktop

Podman Desktop 为 Linux、Windows 和 Mac 机器上的 Podman 和 Kubernetes 提供了一个本地开发环境。 它是 Podman 的一个功能全面的桌面 UI 前端,在非 Linux 操作系统上使用 podman machine 后端来运行容器。 它支持完整的容器生命周期管理(构建、拉取和推送镜像,创建和管理容器,创建和管理 pods,以及处理 Kubernetes YAML)。 该项目在 GitHub 上进行开发,欢迎贡献者加入。

不在范围内

  • 针对各种存储后端的镜像的专门签名和推送。 这些任务请使用 Skopeo
  • 对 Kubernetes CRI 接口的容器管理支持。 这项工作由 CRI-O 守护进程专门负责。

OCI 项目计划

Podman 在不同方面使用了 OCI 项目和最佳实践库:

  • 运行时:我们使用 OCI runtime tools 来生成可用于任何 OCI 兼容的运行时(如 crunrunc)的 OCI 运行时配置。
  • 镜像:镜像管理使用 containers/image 库。
  • 存储:容器和镜像的存储由 containers/storage 管理。
  • 网络:网络支持通过 NetavarkAardvark 实现。无根网络通过 slirp4netns 处理。
  • 构建:构建功能通过 Buildah 提供。
  • Conmon:Conmon 是一个用于监控 OCI 运行时的工具,由 Podman 和 CRI-O 共同使用。
  • Seccomp:为 Podman、Buildah 和 CRI-O 提供的统一 Seccomp 策略。

Seccomp(安全计算模式)是 Linux 内核提供的一种安全机制,用于限制进程可以调用的系统调用。通过这种方式,它可以用来防止潜在的恶意或错误的行为。在这个上下文中,为 Podman、Buildah 和 CRI-O 提供的统一 Seccomp 策略意味着这三个项目共享一个安全配置文件,该文件定义了哪些系统调用是被允许的,哪些是被禁止的,从而增强了它们的安全性。这种统一策略的应用简化了管理,同时也确保了这三个容器运行时组件具有一致的安全基线。

Podman 开发人员积极参与上游 OCI 项目,并致力于根据 Podman 的需求改进和协调这些项目。

Podman 开发者信息

有关博客、发布公告等更多信息,请访问 podman.io 网站!

安装说明 关于如何在您的环境中安装 Podman 的信息。

OCI Hooks 支持 关于 Podman 如何配置 OCI Hooks 以在启动容器时运行的信息。

Podman API Podman REST API 的文档。

Podman 命令 Podman 命令列表,包含指向其手册页的链接,并且在许多情况下还包含展示命令使用方法的视频。

Podman 故障排查指南 Podman 常见问题和解决方案的列表。

Podman 使用转移 有关 ops 和 dev 转移的有用信息,涉及使用 Podman 的基础设施。此页面包含表格,展示了 Docker 命令及其对应的 Podman 命令。

教程 Podman 使用教程。

远程客户端 关于如何使用 Podman 远程客户端的简要指南。

在无根环境下 Podman 的基本设置和使用 一个教程,展示了运行无根 Podman 所需的设置和配置。

发行说明 Podman 最近版本的发行说明。

贡献 关于如何为本项目做出贡献的信息。

Buildah 与 Podman 的关系

Buildah 和 Podman 是两个互补的开源项目,适用于大多数 Linux 平台,这两个项目都位于 GitHub.com,其中 Buildah 位于 这里,Podman 位于 这里。Buildah 和 Podman 都是命令行工具,用于处理 Open Container Initiative (OCI) 镜像和容器。这两个项目在各自的专业领域有所区分。

Buildah 专注于构建 OCI 镜像。Buildah 的命令复制了 Dockerfile 中找到的所有命令。这允许在不使用 Dockerfiles 的情况下构建镜像,并且无需任何 root 权限。Buildah 的最终目标是提供一个更低级的 coreutils 接口来构建镜像。构建镜像时不使用 Dockerfiles 的灵活性允许将其他脚本语言集成到构建过程中。Buildah 遵循简单的 fork-exec 模型,不作为守护进程运行,但它基于 golang 的全面 API,可以集成到其他工具中。

Podman 专注于所有帮助维护和修改 OCI 镜像的命令和功能,例如拉取和标记。它还允许您创建、运行和维护从这些镜像创建的容器。对于通过 Dockerfiles 构建容器镜像,Podman 使用 Buildah 的 golang API,并且可以与 Buildah 独立安装。

简而言之,Buildah 是创建 OCI 镜像的高效方式,而 Podman 则允许您使用熟悉的容器命令行工具在生产环境中管理和维护这些镜像和容器。有关更多详细信息,请参阅 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

在上面的示例中,我们使用 podman run 命令来运行一个名为 quay.io/podman/hello 的容器镜像。Podman 首先尝试从 Quay 容器仓库拉取最新的 hello 镜像,然后运行它。当容器启动时,它会打印出一条问候消息和一些 ASCII 艺术字符,并提供有关 Podman 项目的相关信息,如项目地址、网站、文档和 Twitter 账号。这个示例展示了 Podman 如何简单地运行容器,并展示了 Podman 容器的一些基本交互功能。

贡献

我们欢迎任何人的贡献!

如果您想贡献,请先阅读我们的 贡献指南。 同时,我们也有一个 行为准则 需要您了解。

加入我们的 Podman 社区频道 进行讨论和寻求帮助!

请记住,每一点贡献都很重要,并且会给予相应的认可。

许可证

Podman 使用 Apache License 2.0 授权。 完整的许可证文本可以在 LICENSE 中查看。

安全

请通过 security@containers.org 报告您发现的任何安全问题。 我们将与您合作,确保问题得到及时解决。

更多信息

有关 Podman 的更多信息,请访问 Podman 官网 或阅读 手册页面 以获取完整的命令和选项列表。

我们还提供了许多 教程示例,演示了如何使用 Podman 完成各种任务。

如果您有任何问题或需要帮助,请随时在 Podman 社区频道 中提问。

最后,如果您对 Podman 感兴趣并希望参与其中,欢迎加入我们的社区,共同为容器技术的发展做出贡献!