快速跳转

什么是 Podman?

复制 URL

Podman(全称 pod manager)是一款用于开发、管理和运行容器的开源工具。Podman 由红帽® 工程师联合开源社区一同开发,它可利用 lipod 库来管理整个容器生态系统。 

Podman 采用无守护进程的包容性架构,为容器管理提供了一个易于使用且安全至上的选择。借助其配套工具和功能(如 BuildahSkopeo),开发人员可以对容器环境进行定制以符合自己的需求。开发人员还可以利用 Podman Desktop,这是一个针对在本地环境中使用 Podman 的图形用户界面(GUI)。

用户可以在不同的 Linux® 发行版本上运行 Podman,如红帽企业 LinuxFedoraCentOSUbuntu。 

容器集是一组在一起运行并共享相同资源的容器,与 Kubernetes 容器集类似。Podman 通过简单命令行接口(CLI)和 libpod 库来管理容器集,libpod 库提供用于管理容器、容器集、容器镜像和卷的应用编程接口(API)。Podman 的 CLI 创建并支持开放容器计划(OCI)容器,这种容器旨在满足容器运行时和格式的业界标准。相关项目 Buildah 中提供了更高级的构建功能。

每个容器集都由 1 个基础架构容器和任意数量的普通容器构成。基础架构容器负责保障容器集正常运行并维护(用来将容器与主机隔离开的)用户命名空间。其他容器各自都有一个监控器来跟踪自己的进程并提防死亡容器(即无法正常工作的容器,但由于其资源仍在使用中而无法从环境中删除)。

Podman 与其他容器引擎的不同之处在于无守护进程,即不依赖具有根特权的进程来运行容器。

守护进程是在系统后台运行的进程,可在无用户接口的情况下完成运行容器的工作。我们可以把守护进程看作在用户和容器本身之间通信的中介。

尽管守护进程有助于容器环境的管理,但它们也可能会带来安全漏洞。许多守护进程使用根特权来运行。在 Linux 系统中,根帐户作为具有管理员访问权限(同时无需进行管理员验证)的超级用户,可以读取文件、安装程序、编辑应用和执行其他操作。如此一来,对于企图控制您的容器并渗透主机系统的黑客而言,守护进程就是他们的理想攻击目标。

Podman 剔除了守护进程,让普通用户无需与由根帐户所有的守护进程交互就能运行容器,或者允许使用无根容器。通过无根形式,用户无需使用具有管理员特权的进程,就能创建、运行和管理容器,不仅使容器环境变得更易访问,又可降低安全性风险。此外,Podman 使用 安全增强型 Linux(SELinux)标签来启动各个容器,提高了管理员控制向容器进程提供哪些资源和功能的掌控力。

用户可以从命令行调用 Podman,以便从存储库拉取容器并运行它们。Podman 调用配置好的容器运行时来创建运行的容器。不过,由于没有专门的守护进程,Podman 使用 systemd(一种用于 Linux 操作系统的系统和服务管理器)来进行更新并让容器在后台保持运行。通过将 systemd 和 Podman 集成,您可以为容器生成控制单元,并在自动启用 systemd 的前提下运行它们。

用户可以通过系统上自有的存储库或使用 systemd 单元来控制容器的自动启动和管理。通过允许用户管理自有的资源,并在无根状态下运行容器,可以避免尝试在系统中为不应具有写入权限等特权的区域添加这些特权。这样也可确保每一用户具有单独的容器和镜像集合,并可在同一主机上同步使用 Podman,而不会彼此干扰。用户完成自己的工作时,可将变更推送到共有的镜像仓库,将他们的镜像共享给其他人。

Podman 也可部署 RESTful API(REST API)来管理容器。REST 是表述性状态传递的英文缩写。REST API 是遵循 REST 架构规范的 API,支持与 RESTful Web 服务进行交互。借助 REST API,您可以从 cURL、Postman 和 Google 的 Advanced REST 客户端等许多平台调用 Podman。

Podman Desktop 是 Podman 的 GUI,为开发人员直接在笔记本电脑或工作站上处理容器提供了一个集中位置。开发人员在构建、推送和拉取镜像并管理 Podman 资源时,可以直接使用一个在本地 Linux、Windows 和 macOS 环境中均保持一致的 GUI 。通过 Podman Desktop,开发人员还可以向 Kubernetes 环境交付已做好部署准备的容器化应用。

Podman Desktop 支持的扩展包便于添加其他功能。例如,Podman AI Lab 为在本地环境中构建使用大语言模型(LLM)的应用添加了配方,并包含一个具有开源许可的 LLM 精选目录。再例如,Podman Desktop 的红帽扩展包可以帮助开发人员使用特定的红帽技术,如红帽 OpenShift®

Podman 是一种模块化容器引擎,因此必须与 Buildah 和 Skopeo 等工具搭配使用才能构建和移动容器。使用 Buildah 时,您可以从头开始构建容器,也可将某个镜像用作起点来构建。Skopeo 可在不同类型的存储系统之间移动容器镜像,允许您在不同镜像仓库(例如 docker.io、quay.io 和您的内部镜像仓库)之间以及本地系统上不同类型的存储之间复制镜像。这种模块式的容器化工具有助于生成灵活的轻量型环境,减小开销并隔离您所需的功能。利用这些容器,可以使用更小、更模块化的工具以专注于单一用途,并根据需要随时更新。

我们可以把 Podman、Buildah 和 Skopeo 比喻成一套特殊的瑞士军刀,它们彼此互补,几乎能满足所有容器用例的需求。Podman 就是这套刀中最大的一把。

Podman 和 Buildah 默认使用 runC(OCI 运行时)来启动容器。您可以使用 runC 构建和运行镜像,也可以用它来运行 Docker 格式的镜像。Buildah 由 Go 语言编写,可读取运行时规范,配置 Linux 内核,最终创建并启动容器进程。在更改一些配置后,您也可以将 Podman 与 crun 等其他工具搭配使用。

Docker 是支持创建和使用 Linux 容器的一种容器化技术。Podman 和 Docker 的主要区别在于 Podman 采用无守护进程架构。Podman 容器一直是无根的,而 Docker 最近才将无根模式添加到其守护进程配置中。Docker 是用于创建和管理容器的一体化工具,而 Podman 以及 Buildah 和 Skopeo 等相关工具则更擅长承担某些方面的容器化工作。这意味着您可以仅使用所需的工具来定制环境。

Podman 具有替代 Docker 的强大实力,但两者也可搭配使用。用户可以将 Docker 别名设置为 Podman(alias docker=podman)或反之,在这两者之间轻松切换。此外,一个叫做 podman-docker 的 rpm 可以将“docker”置入系统应用路径,从 Docker 轻松切换过来,在需要“docker”命令时对这些环境调用 Podman。Podman 的 CLI 与 Docker 类似,因此熟悉其中之一的用户也能快速上手使用另一个。

一些开发人员会将 Podman 和 Docker 结合起来使用,在开发阶段使用 Docker,然后在运行时环境中将程序转移到 Podman。

Podman 非常适合不使用 Kubernetes 或红帽 OpenShift 容器平台来运行容器的开发人员。对于 Kubernetes 容器编排,开发人员可以使用开源、社区驱动的容器引擎 CRI-O

Podman 改变了容器格局,它不仅提供比肩领先容器引擎的高性能功能,而且具有许多开发团队迫切需要的灵活性、可访问性和安全性功能。Podman 可以帮助您:

  • 管理容器镜像和完整的容器生命周期,包括容器运行、联网、检查和下线。
  • 为无根容器和容器集运行和隔离资源。
  • 支持 OCI 和 Docker 镜像,以及与 Docker 兼容的 CLI。
  • 打造一个无守护进程的环境,以提高安全性并减少闲置资源消耗。 
  • 部署 REST API 来支持 Podman 的高级功能。
  • 借助 Checkpoint/Restore in Userspace(CRIU),实施面向 Linux 容器的检查点/恢复功能。CRIU 可以冻结正在运行的容器,并将其内存内容和状态保存到磁盘,以便容器化工作负载能够更快地重新启动。
  • 自动更新容器。Podman 会检测更新的容器是否无法启动,并自动回滚到上一个工作版本。这可以将应用的可靠性提升到新的水平。 

红帽企业 Linux 订阅中包含了 Podman,因此您可以运行符合 OCI 要求的容器,这些容器是利用可信、可靠并享有支持的通用基础镜像(UBI)构建的。红帽企业 Linux 是在企业环境中运行 Linux 容器的标准。借助它,开发人员可以轻松启动容器、管理部署并加快新应用的开发。升级红帽企业 Linux 基础架构将确保您随时可充分利用这些优势。在开放混合云环境中基于红帽企业 Linux 构建可移植的应用和容器,您的企业就能够始终保持敏捷,并随着目标发展不断转型。

红帽企业 Linux Web 控制台通过易于使用的 Web 界面简化系统的部署和日常管理。Podman 可作为一个 Web 控制台组件,帮助您管理容器和镜像。在 Web 控制台的控制面板中访问容器主机并监控系统负载,以此来监控容器占用的 CPU 和内存。借助 Web 控制台,您还可以简化常见任务和复杂运维,从而精简容器管理工作。

此外,您还可以使用红帽 Ansible® 自动化平台,利用其 Ansible Playbook 自动化 Podman 的功能,如安装容器、部署容器以及执行通常比较耗费时间和资源的其他任务。

在 Podman、Podman Desktop 和其他开放标准容器工具的加持下,红帽企业 Linux 成为了一个强大的容器主机,不仅能提供生产级的支持、稳定性和安全功能,也能为迈向 Kubernetes 和红帽 OpenShift 奠定良好的基础。

继续阅读

文章

容器与虚拟机

Linux 容器和虚拟机(VM)都是封装型计算环境,里面组合了各种 IT 组件并独立于系统的其余部分。

文章

什么是容器编排?

容器编排是指自动化容器的部署、管理、扩展和联网。

文章

什么是 Linux 容器?

Linux 容器是与系统隔离开的一系列进程,它从单独的镜像运行,并由该镜像提供支持进程所需的全部文件。