Podman 教程

Podman 简介

Podman 简介

Podman 是一款开源的容器引擎,核心功能与 Docker 兼容,主打无守护进程(daemonless)架构和更强的安全性。

Podman 由红帽主导开发,目标是成为 Docker 的直接替代方案,支持 OCI 容器标准,可无缝运行 Docker 镜像,迁移成本极低。

 

什么是 OCI 容器标准?

OCI(Open Container Initiative,开放容器倡议)容器标准是由 Linux 基金会主导、多家技术公司(如红帽、谷歌、微软等)共同制定的一套开放的容器规范,旨在统一容器的格式和运行时行为,避免容器技术碎片化,确保不同容器引擎之间的兼容性。

OCI 标准主要包含两个关键规范,它们共同定义了容器的生命周期和交互方式:

(1)OCI 镜像规范(Image Specification)

规定了容器镜像的文件格式、目录结构和元数据标准。定义了镜像如何被打包(如分层存储、Manifest 清单文件、配置文件等)。确保不同工具(如 Docker、Podman、Buildah 等)构建的镜像可以互相兼容,例如 Docker 构建的镜像可被 Podman 直接运行。

(2)OCI 运行时规范(Runtime Specification)

规定了容器运行时的行为标准,包括容器的创建、启动、停止、销毁等生命周期管理。定义了容器进程的隔离方式(如命名空间、控制组)、资源限制、挂载点等底层细节。确保不同运行时(如 runc、crun、kata-runtime 等)对容器的操作逻辑一致,上层引擎(如 Kubernetes)可无缝调用。

为什么要制定 OCI 标准?

主要有下面几点:

  • 兼容性:只要遵循 OCI 标准,不同厂商的容器引擎(如 Docker、Podman)、镜像仓库(如 Docker Hub、Harbor)、运行时(如 runc)就能互相兼容,用户无需担心 “锁定效应”。

  • 开放性:避免了某一厂商垄断容器标准,推动容器技术在开源生态中健康发展。

  • 可移植性:容器可以在不同环境(开发、测试、生产)和不同平台(Linux、云服务)之间无缝迁移,降低了跨环境部署的复杂度。

常见的 OCI 兼容工具

  • 容器引擎:Docker、Podman、CRI-O(Kubernetes 容器运行时接口实现)。

  • 镜像构建工具:Buildah、Docker Build、Kaniko。

  • 运行时:runc(Docker 默认运行时)、crun(轻量替代方案)、kata-runtime(安全隔离型运行时)。

 

Podman 的历史

Podman 是由红帽公司领导开发的容器管理工具,其发展历程如下:

  • 项目启动:2017 年,Podman 项目在 GitHub 上进行了首次提交,最初它被称为 kpod,后来改名为 Podman,即 “Pod Manager” 的缩写。

  • 首次公开版本发布:2018 年,Podman 发布了第一个公开版本 0.2。

  • 1.0 版本发布:2019 年 1 月 16 日,Podman 1.0.0 版本正式发布,标志着该工具在功能和稳定性上达到了一个新的里程碑。

  • 仓库重命名:2020 年 7 月,随着 Podman 2.0 版本的发布,其在 GitHub 上的仓库从github.com/containers/libpod 重命名为 github.com/containers/podman,以更好地反映项目的实际使用情况和重点。

  • 支持 Docker Compose:2022 年,Podman 4.1 版本增加了对 Docker Compose v2.0 的支持,使用户能够更方便地在 Podman 环境中使用现有的 Compose YAML 文件。

  • Podman Desktop 发布:2023 年 5 月 23 日,Podman Desktop 1.0 版本发布,为用户提供了一个图形化的界面来管理 Podman 容器。

  • 捐赠给 CNCF:2024 年,红帽公司在 Kubecon 上宣布将 Podman 和 Podman Desktop 捐赠给云原生计算基金会(CNCF),2025 年 1 月 21 日,这两个项目被 CNCF 正式接受。

  

Podman 主要特性

下面是 Podman 的主要特性:

(1)无守护进程设计:无需后台运行 dockerd 服务,容器进程直接由用户进程启动,减少系统资源占用。

(2)原生 rootless 支持:默认可在非 root 用户下运行容器,避免 root 权限泄露风险,安全性更优。

(3)与 Docker 兼容:支持 docker build、docker run 等常用命令,可通过 alias docker=podman 直接替换使用。

(4)内置 Pod 支持:原生支持 Pod(容器组)概念,可一次性管理多个关联容器,无需依赖 Kubernetes。

(5)轻量灵活:体积更小,启动更快,同时支持 Linux、macOS、Windows 等多平台。

  

Podman 和 Docker 比较

Podman 和 Docker 都是主流的容器引擎,均遵循 OCI 标准(兼容容器镜像和运行时),但在架构设计、安全性、功能特性等方面存在显著差异。主要区别如下:

特性

Docker

Podman

架构模式

客户端 / 服务器(C/S)架构,依赖守护进程 dockerd。所有容器操作(如 run、build)都需通过客户端与 dockerd 通信,由守护进程统一管理容器。

无守护进程(daemonless)架构,直接通过命令行工具与容器运行时(如 runc)交互。容器进程由用户进程直接启动,无需中间守护进程。

进程关系

容器是 dockerd 的子进程,依赖守护进程存活。

容器是 podman 命令的子进程,与用户进程直接关联,不依赖后台服务。

故障影响

若 dockerd 崩溃,所有运行中的容器会受影响(甚至终止)。

无守护进程单点故障,即使 podman

命令退出,容器仍可正常运行。

Root 权限依赖

传统上默认需要 root 权限运行 dockerd(虽然后续支持 rootless,但配置较复杂)。

root 权限下,容器漏洞可能直接影响主机系统。

原生支持 rootless 模式(非 root 用户运行),且配置简单。

默认推荐非 root 运行,通过 Linux 用户命名空间隔离,降低权限泄露风险。

安全隔离

依赖 dockerd 权限控制,root 模式下隔离边界较薄弱。

基于用户命名空间(user namespace)实现更严格的隔离,非 root 容器无法访问主机敏感资源。

Pod 支持

不原生支持 Pod(容器组),需依赖 Kubernetes 管理。

原生支持 Pod 概念,可通过 podman pod 命令创建包含多个容器的 Pod,适合本地模拟 Kubernetes 环境。

到这里,你已经对 Podman 有粗浅的认识了,更多 Podman 的知识请阅读后续章节……

 

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号