Podman 入门:为什么它是 Docker 的优秀替代品
如果你用过 Docker,一定对那条常驻在后台的 dockerd 守护进程不陌生。它功能强大,但也带来一个尴尬的事实:只要 dockerd 挂了,你所有的容器管理操作就全部失灵;而且它默认以 root 身份运行,一旦被攻破,宿主机的 root 权限就直接暴露。
Podman 正是为解决这些痛点而生。它由 Red Hat 主导,目标是成为「无需守护进程、无需 root」的容器引擎。
什么是 Podman
Podman(Pod Manager)是一个开源的容器引擎,用于开发、管理和运行 OCI(Open Container Initiative)标准的容器与 Pod。最有趣的一点是:它的命令行参数与 Docker 几乎完全一致——你甚至可以把 docker 直接 alias 成 podman,现有脚本几乎不用改。
# Docker 用户熟悉的操作,在 Podman 里一模一样
podman pull nginx:alpine
podman run -d -p 8080:80 --name web nginx:alpine
podman ps
核心差异:无守护进程 + 无根容器
Podman 与 Docker 的根本区别体现在架构层面。
无守护进程(Daemonless)
Docker 采用 Client/Server 架构:docker 命令行只是客户端,真正干活的 dockerd 守护进程常驻后台。Podman 则没有守护进程——每条命令直接通过 runC 等 OCI runtime 与 Linux 内核交互(借助 conmon 做进程监控)。
这意味着:
- 没有单点故障,某条命令崩溃不会影响其他容器;
- 不需要一个长期运行的特权进程;
- 天然契合 Linux 的
systemd集成。
无根容器(Rootless)
Docker 早期必须以 root 运行。Podman 通过 user namespaces 让用户以普通身份启动容器,容器内的 root 实际映射到宿主机上的一个非特权 UID,互不干扰。
无根容器不是"弱化版安全",而是把风险隔离到了用户层面:即使容器被逃逸,攻击者拿到的也只是该用户的权限,而非整台机器的 root。
Podman vs Docker 速查
| 维度 | Docker | Podman |
|---|---|---|
| 架构 | Client/Server(有守护进程) | 无守护进程(直接调用 runtime) |
| 运行身份 | 默认 root | 默认无根(rootless) |
| 单点故障 | dockerd 挂掉则全崩 | 无,命令独立 |
| Pod 概念 | 需 Docker Compose 模拟 | 原生支持 podman pod |
| systemd 集成 | 需自行配置 | 官方推荐 quadlet |
| CLI 兼容性 | — | 与 docker 高度一致 |
| 许可证 | 已转向商业订阅协议 | Apache 2.0 完全开源 |
安装 Podman
不同发行版的安装方式都很简单:
# macOS(通过 Homebrew)
brew install podman
podman machine init && podman machine start
# Ubuntu / Debian
sudo apt update && sudo apt install -y podman
# CentOS / Rocky / Fedora
sudo dnf install -y podman
验证安装:
podman --version
podman info | head -n 5
从 Docker 平滑迁移
如果你已经有一套基于 Docker 的工作流,迁移成本极低:
# 1. 建立别名,旧脚本无需改动
echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrc
# 2. 镜像与容器数据可直接复用(都遵循 OCI 标准)
podman images
podman run hello-world
小结
Podman 并非要"取代"Docker 的一切,而是在安全模型与架构简洁性上给出了更现代的答案。对于新项目、CI 环境、以及注重最小权限的生产部署,无守护进程 + 无根容器的组合非常值得尝试。
下一篇,我会带你深入 Podman 无根模式下的常用命令、Pod 编排,以及与 Docker Compose 的兼容实战。
相关阅读:Podman 无根容器实战