进阶实战: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=podman

3. 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 ps

3.2 自动启动:生成 Systemd 服务

Podman 可以将容器直接转换为系统服务,实现开机自启。

podman generate systemd --name web --files --new

4. 常见坑点

痛点原因解决方法
无法绑定 80 端口Rootless 模式无法绑定 1024 以下端口使用 8080 端口,或修改 net.ipv4.ip_unprivileged_port_start
拉取镜像慢默认优先拉取 Quay.io修改 /etc/containers/registries.conf

5. 结业练习

Navigation