Docker 和 Podman 都能管理容器,但架构不同。如果看重安全性和无守护进程,选 Podman;如果依赖 Docker Swarm 或特定桌面工具,选 Docker。
先说结论:两者核心功能相似,但 Podman 更安全且无守护进程,Docker 生态更成熟。
- 适合:追求更高安全性、需要 Rootless 运行或已在 RHEL/CentOS 8+ 环境。
- 重点看:守护进程有无、权限模型、镜像构建工具链。
- 别忽略:Podman 默认不自动重启容器(需生成 systemd 服务),Docker 生态插件更丰富。
命令速用版
Podman 命令设计与 Docker 高度兼容,大多数情况下可直接替换。
运行容器:
podman run -d `--name` myapp nginx:latest
查看容器:
podman ps
构建镜像(需配合 Buildah):
buildah bud -t myimage .
为什么会这样
Docker 采用客户端 - 服务器架构,依赖后台守护进程(Docker Daemon)管理容器,该进程通常拥有 root 权限。Podman 采用无守护进程架构,直接通过 OCI 运行时(如 runc)启动容器,容器进程是 Podman 的子进程,类似 Linux 的 fork/exec 模型。
这种设计使得 Podman 支持 Rootless 模式,普通用户即可运行容器,减少了攻击面。而 Docker 守护进程一旦故障,可能影响所有容器,且权限较高。
分步处理
1. 安装工具:CentOS 8 已内置 Podman,CentOS 7 需自行安装。Docker 需单独安装引擎。
2. 运行容器:使用 podman run 命令,参数与 docker run 基本一致。如需挂载目录,注意权限问题,必要时使用`--privileged` 开启权限。
3. 镜像构建:Podman 本身不构建镜像,需使用 Buildah 工具辅助。Docker 可自给自足构建。
4. 服务管理:Podman 容器默认退出后不重启,如需开机自启,需生成 systemd 服务文件。
怎么验证是否生效
1. 检查进程:使用 ps -ef | grep docker 或 podman 查看是否有守护进程。Docker 应有 dockerd 进程,Podman 无常驻守护进程。
2. 检查权限:尝试用普通用户运行容器。Podman 支持非 root 用户运行,Docker 通常需要 root 或 docker 组权限。
3. 查看容器状态:使用 podman ps 或 docker ps 确认容器运行状态。
常见坑
1. 自动重启:Podman 默认不支持`--restart` 参数像 Docker 那样依赖守护进程保活,需配置 systemd。
2. 网络与存储:Podman 某些网络配置或卷挂载权限可能与 Docker 有差异,需测试验证。
3. 生态工具:Docker 拥有 Docker Swarm 集群功能及更完善的桌面应用,Podman 更侧重 K8s Pod 概念兼容。
参考来源
- Podman 与 Docker:容器技术的比较与区别(资料时间:2024 年 3 月 28 日)
- 容器引擎 Docker 与 Podman 解析(消息于 2023 年 7 月 15 日发布)
- Podman 是什么?它与 Docker 有什么不同?(发布时间是 2020 年 9 月 6 日)
- Podman 已成 Linux 官方标配!Docker 没戏了?(搜索结果收录于 2022 年 2 月 23 日)