Podman 快速上手指南(附与 Docker 的优劣对比)
一、30 秒速览
- Podman = Docker CLI 的 90% 兼容 + 无守护进程 + 原生 rootless
- 绝大多数场景可
alias docker=podman直接替换 - 与 Docker 的差异主要体现在架构、安全、生态三条主线
二、安装(任选其一)
| 系统 | 命令示例 |
|---|---|
| RHEL/CentOS 8+ | sudo dnf install podman |
| Ubuntu 20.04+ | sudo apt install podman |
| macOS | brew install podmanpodman machine init && podman machine start |
| Windows | winget install RedHat.Podmanpodman machine init --cpus 2 --memory 2048 |
三、10 条常用命令(与 Docker 对照)
| 目的 | Docker | Podman |
|---|---|---|
| 运行容器 | docker run -d nginx |
podman run -d nginx |
| 构建镜像 | docker build -t app:1.0 . |
podman build -t app:1.0 . |
| 查看日志 | docker logs <cid> |
podman logs <cid> |
| 进入容器 | docker exec -it <cid> bash |
podman exec -it <cid> bash |
| 清理 | docker system prune -a |
podman system prune -a |
| Compose | docker-compose up |
podman-compose up 或 podman play kube |
| 生成 systemd | — | podman generate systemd --new <cid> |
| rootless 启动 | 需额外配置 | 开箱即用 podman run … |
四、rootless 容器(安全亮点)
# 普通用户即可运行
$ whoami # alice
$ podman run --rm -p 8080:80 nginx
容器进程在宿主机以 alice 的 UID 运行,天然避免 root 逃逸。
五、Pod 与 kube 文件(对接 K8s)
# 创建含两个容器的 Pod
podman pod create --name webapp -p 8080:80
podman run -d --pod webapp nginx
podman run -d --pod webapp redis
# 一键生成可直接丢进 K8s 的 YAML
podman generate kube webapp > webapp.yaml
六、与 Docker 的优劣对比
| 维度 | Docker | Podman |
|---|---|---|
| 架构 | 客户端-服务器,依赖 dockerd 常驻 |
无守护进程,直接 fork/run |
| 安全 | 默认 root;rootless 需额外配置 | 原生 rootless,最小化攻击面 |
| 资源占用 | dockerd 常驻,占用更高 |
按需启动进程,内存/CPU 更轻 |
| 镜像构建 | 内置 BuildKit | 调用 Buildah,模块化但多一步 |
| Compose/Swarm | 原生支持 | Compose 需 podman-compose;Swarm 不支持 |
| 桌面支持 | Docker Desktop(Win/Mac 一键安装) | macOS/Win 需 podman machine,体验稍弱 |
| 生态/文档 | Hub 镜像丰富,社区最大 | 兼容 CLI,但周边工具链仍在追赶 |
| 许可证 | Docker Desktop 商业订阅 | 全开源 Apache 2.0,无收费顾虑 |
七、迁移指北
- 镜像仓库共用
Podman 可直接 login Docker Hub、Harbor 等,镜像格式 100% 兼容。
CI/CD 调整
把脚本里 docker 命令全替换成 podman 即可;若使用 docker.sock,改为启动 podman.socket:
systemctl --user enable --now podman.socket
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
无痛迁移
alias docker=podman
docker-compose → podman-compose
八、何时选 Podman,何时选 Docker?
- 选 Podman:生产环境对安全/合规要求高;想彻底摆脱 root;需要与 systemd 深度集成;资源受限的边缘节点。
- 继续 Docker:重度依赖 Docker Desktop 一键体验;需要 Swarm 编排;团队已大量脚本围绕
docker.sock且暂不想改。
一句话总结
开发测试图方便,Docker 仍是最短路径;安全合规、云原生、rootless 场景,Podman 已足够成熟,“alias docker=podman” 就能平滑起步。