进阶实战:Podman 探索
在 RHEL 8 和 Fedora 之后,Podman 取代了 Docker 成为红帽系的默认容器引擎。它最大的口号是:“如果你会 Docker,那你已经会了 Podman”。
1. 为什么选择 Podman?
- Docker: 依赖一个巨大的 Root 权限守护进程 (Daemon)。一旦守护进程挂了,所有容器都会死掉。
- Podman: 无守护进程 (Daemonless)。容器直接通过 Linux 子进程启动,互不影响。
Podman 允许普通用户无需 sudo、无需加入任何组即可运行容器。即便容器被黑,攻击者也只能获得普通用户权限,无法破坏宿主机。
Podman 支持通过一个简单的命令生成 Kubernetes 兼容的 YAML 文件。
2. 丝滑切换:Alias 技巧
由于 Podman 的命令参数与 Docker 几乎 100% 兼容,你完全可以进行“无痛迁移”:
# 在 .zshrc 或 .bashrc 中加入
alias docker=podman3. Podman 的核心特性
3.1 Pod (容器组) 概念
Podman 引入了 Kubernetes 的 Pod 概念。你可以将多个相关的容器放在同一个 Pod 中,它们共享同一个 IP(localhost 互通)。
▶ 实操:创建一个 Pod 并运行服务
# 1. 创建 Pod
podman pod create --name my-app-stack -p 8080:80
# 2. 向 Pod 中添加 Nginx
podman run -d --pod my-app-stack --name web nginx
# 3. 查看 Pod 状态
podman pod ps3.2 自动启动:生成 Systemd 服务
Podman 可以将容器直接转换为系统服务,实现开机自启。
podman generate systemd --name web --files --new4. 常见坑点
| 痛点 | 原因 | 解决方法 |
|---|---|---|
| 无法绑定 80 端口 | Rootless 模式无法绑定 1024 以下端口 | 使用 8080 端口,或修改 net.ipv4.ip_unprivileged_port_start |
| 拉取镜像慢 | 默认优先拉取 Quay.io | 修改 /etc/containers/registries.conf |