Podman 无根容器运行教程

Podman 是 Red Hat 主导开发的容器引擎,与 Docker 命令行完全兼容,但采用了无守护进程(daemonless)和无根(rootless)的架构设计。在搬瓦工 VPS 上,Podman 提供了一种更安全的容器运行方式,无需 root 权限即可管理容器。本文将介绍 Podman 的安装、使用及其与 Docker 的差异。

一、Podman 与 Docker 的区别

  • 无守护进程:Docker 依赖后台运行的 dockerd 守护进程,Podman 直接通过 fork/exec 启动容器。
  • 无根运行:Podman 默认支持以普通用户身份运行容器,不需要 root 权限。
  • Pod 原生支持:Podman 内置 Pod 概念(类似 Kubernetes Pod),可以将多个容器组成一组。
  • 命令兼容:Podman 的命令行接口与 Docker 几乎完全一致,可以直接替换。
  • Systemd 集成:Podman 可以为容器生成 systemd 服务文件,实现系统级管理。

二、安装 Podman

2.1 Ubuntu/Debian 安装

apt-get update
apt-get install -y podman
podman --version

2.2 CentOS/RHEL 安装

yum install -y podman
podman --version

2.3 配置无根模式

# 检查 subuid/subgid 配置
grep $(whoami) /etc/subuid
grep $(whoami) /etc/subgid

# 如果没有配置,手动添加
echo "$(whoami):100000:65536" | sudo tee -a /etc/subuid
echo "$(whoami):100000:65536" | sudo tee -a /etc/subgid

# 验证无根模式
podman info --format '{{.Host.Security.Rootless}}'

三、基本使用

Podman 的命令与 Docker 完全兼容,你可以直接将 docker 替换为 podman

# 拉取镜像
podman pull nginx:latest

# 运行容器
podman run -d --name web -p 8080:80 nginx:latest

# 查看运行中的容器
podman ps

# 查看日志
podman logs web

# 进入容器
podman exec -it web /bin/bash

# 停止和删除容器
podman stop web
podman rm web

# 查看本地镜像
podman images

3.1 设置 Docker 兼容别名

echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrc

四、Pod 管理

Pod 是 Podman 的特色功能,一个 Pod 中的容器共享网络命名空间:

# 创建 Pod
podman pod create --name webapp -p 8080:80 -p 3306:3306

# 在 Pod 中运行容器
podman run -d --pod webapp --name web nginx:latest
podman run -d --pod webapp --name db \
  -e MYSQL_ROOT_PASSWORD=password \
  mysql:8.0

# Pod 中的容器通过 localhost 互相访问
# web 容器可以通过 localhost:3306 连接 db

# 查看 Pod 状态
podman pod list
podman pod inspect webapp

# 停止和删除 Pod(同时停止其中所有容器)
podman pod stop webapp
podman pod rm webapp

五、使用 Podman Compose

# 安装 podman-compose
pip3 install podman-compose

# 使用方法与 docker-compose 相同
cat > docker-compose.yml <<'EOF'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  app:
    image: node:20-alpine
    working_dir: /app
    volumes:
      - ./app:/app
    command: node server.js
EOF

podman-compose up -d
podman-compose ps
podman-compose down

六、生成 Systemd 服务

Podman 可以将容器转换为 systemd 服务,实现开机自启和系统级管理:

# 先创建并运行容器
podman run -d --name nginx-service -p 80:80 nginx:latest

# 为运行中的容器生成 systemd 服务文件
podman generate systemd --name nginx-service --files --new

# 安装服务(root 模式)
cp container-nginx-service.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable container-nginx-service
systemctl start container-nginx-service

# 无根模式安装到用户级 systemd
mkdir -p ~/.config/systemd/user/
cp container-nginx-service.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable container-nginx-service
loginctl enable-linger $(whoami)

七、镜像构建

# Podman 内置构建功能(使用 Buildah 后端)
podman build -t myapp:latest .

# 与 Docker 构建完全兼容
podman build -f Dockerfile -t myapp:v1.0 --build-arg VERSION=1.0 .

八、与 Docker 镜像互通

# Podman 可以使用 Docker Hub 镜像
podman pull docker.io/library/nginx:latest

# 导出/导入镜像
podman save -o nginx.tar nginx:latest
podman load -i nginx.tar

# 使用 Skopeo 在不同仓库间复制镜像
skopeo copy docker://docker.io/library/nginx:latest containers-storage:nginx:latest

九、常见问题

端口小于 1024 无法绑定

# 无根模式下无法绑定特权端口,解决方法:
# 方法一:使用高端口映射
podman run -d -p 8080:80 nginx

# 方法二:设置 net.ipv4.ip_unprivileged_port_start
sudo sysctl net.ipv4.ip_unprivileged_port_start=80

存储空间管理

# Podman 数据默认存储路径
# root 模式:/var/lib/containers/
# 无根模式:~/.local/share/containers/

# 清理无用资源
podman system prune -a

总结

Podman 为搬瓦工 VPS 用户提供了一种更安全的容器运行方案。它与 Docker 命令兼容,迁移成本极低。如果你需要更底层的镜像构建能力,可以参考 Buildah 教程;镜像管理和复制可以使用 Skopeo。这三者合称为容器管理的"红帽三件套"。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。