EL 8:Podman 取代 Docker
EL 8 做出过一个影响深远的决定:官方仓库不再提供 Docker,容器工具链换成了 Podman、Buildah 与 Skopeo 三件套。今天 EL 生态”无守护进程、rootless 优先”的容器风格,就是从这一版定型的。
这是什么变化
Section titled “这是什么变化”Docker 的架构是一个常驻的 root 守护进程(dockerd)加 CLI 客户端;所有容器都是 dockerd 的子进程,守护进程故障即全部容器受牵连,且守护进程拥有 root 权限,攻击面大。
Red Hat 的选择是重写工具链:
- Podman:无守护进程,CLI 直接通过 OCI 运行时(runc/crun)拉起容器,容器可以是调用者自己的子进程;
- Buildah:专注镜像构建(可不用 Dockerfile,逐条命令构建);
- Skopeo:专注镜像在仓库间的检查、复制与签名。
三者共享同一套镜像存储与 OCI 标准,与 Docker 生态(镜像格式、Docker Hub、Compose 文件)保持兼容。
EL 7 → EL 8 对比
Section titled “EL 7 → EL 8 对比”| 项 | EL 7 | EL 8 |
|---|---|---|
| 官方容器引擎 | Docker(rhel 渠道) | Podman |
| 守护进程 | dockerd(root 常驻) | 无 |
| rootless 容器 | 不支持/实验 | 一等公民 |
| 镜像构建 | docker build | podman build / buildah |
| systemd 集成 | 依赖 docker.service | 容器即普通 unit(Quadlet) |
- 命令习惯:Podman CLI 与 Docker 高度兼容,
alias docker=podman可覆盖绝大多数日常操作;差异集中在需要守护进程语义的命令(如docker events、远程 API)。 - rootless:普通用户可以直接跑容器,无需加入 docker 组(等价于 root 的风险);CI 与多租户场景显著更安全。
- systemd 集成:EL 8 时代用
podman generate systemd,EL 10 起推荐 Quadlet 声明式 unit。 - Compose:
podman-compose/ Podman 原生 compose 支持可用,但行为细节与 docker compose 有差异,生产编排建议直接落 systemd/Quadlet 或 Kubernetes 侧方案。
sudo dnf install podman buildah skopeopodman --versionpodman info --format '{{.Host.Security.Rootless}}'- 盘点现有 docker 命令与脚本,按 CLI 兼容度替换;
- 镜像与数据:
podman与 docker 共享 OCI 镜像格式,但本地存储不互通,需重新 pull 或skopeo copy; - 编排层迁移到 systemd unit / Quadlet。
- Podman 基础 — 日常操作与 rootless 实践
- Podman vs Docker — 架构与命令差异全对照
- Quadlet — 容器作为 systemd 服务
- EL 9:cgroup v2 成为默认 — rootless 限制能力的补全