Podman 容器引擎安装与配置 🚀

📦 一个无需守护进程、更安全可靠的容器运行时工具
目录
🌟 项目简介
Podman(Pod Manager)是一个开源的容器运行时工具,用于开发、管理和运行 OCI(Open Container Initiative)标准的容器。由 Red Hat 开发并于 2018 年推出,它采用无守护进程(daemon-less)架构,作为 Docker 的替代方案,提供更安全、更轻量的容器管理方式。
✨ 主要特点:
- ✅ 无需守护进程:采用传统的 fork-exec 模式,不需要长期运行的后台服务,更加轻量安全
- ✅ 与 Docker CLI 兼容:学习成本低,大多数命令与 Docker 相同
- ✅ 支持 rootless 容器:允许非 root 用户运行容器,提高安全性
- ✅ 完整的容器生态系统支持:支持容器、镜像、卷和 pod 的管理
- ✅ 与 systemd 集成良好:可以生成 systemd 服务文件,管理容器生命周期
- ✅ 支持 Pod 概念:类似 Kubernetes 中的 Pod,可管理一组共享资源的容器
🔄 Podman 与 Docker 的主要区别
特性 |
Podman |
Docker |
架构 |
无守护进程 (daemon-less) |
客户端-服务器架构,需守护进程 |
root 权限 |
支持非 root 用户运行容器 |
通常需要 root 权限 |
存储 |
镜像和容器存储在不同地方 |
必须存储在 Docker 引擎本地 |
Pod 支持 |
原生支持 Pod 概念 |
需要通过 Docker Compose 实现类似功能 |
📥 安装 Podman(Debian/Ubuntu)
1. 从系统仓库安装
1 2 3 4 5
| sudo apt update
sudo apt install -y podman
|
2. 从第三方仓库安装最新版(可选)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| source /etc/os-release wget http://downloadcontent.opensuse.org/repositories/home:/alvistack/Debian_$VERSION_ID/Release.key -O alvistack_key cat alvistack_key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/alvistack.gpg >/dev/null
echo "deb http://downloadcontent.opensuse.org/repositories/home:/alvistack/Debian_$VERSION_ID/ /" | sudo tee /etc/apt/sources.list.d/alvistack.list
sudo apt update sudo apt -y install podman uidmap dbus-x11 slirp4netns libpam-systemd podman-aardvark-dns podman-netavark podman-docker
podman --version
|
3. 安装 pipx 和 podman-compose
1 2 3 4 5 6 7 8 9
| sudo apt install -y pipx pipx ensurepath
pipx install podman-compose
podman-compose --version
|
💡 提示:安装完成后,可能需要重新登录 SSH 会话或执行 source ~/.bashrc
来刷新环境变量。
⚙️ 基本配置
1. 配置国内镜像加速
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| sudo mkdir -p /etc/containers
sudo tee /etc/containers/registries.conf <<'EOF' unqualified-search-registries = ["docker.io"]
[[registry]] prefix = "docker.io" location = "docker.1ms.run"
[[registry]] prefix = "dockerio" location = "hub.rat.dev"
[[registry]] prefix = "docker.io" location = "docker.xuanyuan.me"
[[registry]] prefix = "docker.io" location = "docker.1panel.live" EOF
|
2. 配置无根模式(Rootless Mode)
1 2 3 4 5 6 7 8 9
| sudo useradd -r -m -s /bin/bash podman
echo "podman:100000:65536" | sudo tee -a /etc/subuid echo "podman:100000:65536" | sudo tee -a /etc/subgid
sudo loginctl enable-linger podman
|
3. 解决无根模式下的警告
在非 root 用户下使用 Podman 时,可能会遇到 cgroup 警告,可以通过以下配置解决:
1 2 3 4 5 6 7 8 9
| mkdir -p ~/.config/containers
tee ~/.config/containers/containers.conf <<'EOF' [engine] events_logger = "file" cgroup_manager = "cgroupfs" EOF
|
📦 镜像管理
Podman 的镜像管理与 Docker 类似,但拉取镜像时通常需要指定完整的注册表路径。
常用镜像管理命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| podman search nginx --filter=stars=5000
podman pull docker.io/library/nginx:latest
podman images
podman rmi -f feb5d9fea6a5
podman save -o nginx.tar docker.io/nginx
podman load -i nginx.tar
|
🐳 容器管理
1. 容器生命周期管理
1 2 3 4 5 6 7 8 9 10
| podman run -itd --name my_nginx -p 80:80 nginx
podman start my_nginx podman stop my_nginx podman restart my_nginx
podman rm -f my_nginx
|
2. 容器交互与监控
1 2 3 4 5 6 7 8 9 10 11
| podman exec -it my_nginx /bin/bash
podman logs -tf --tail 50 my_nginx
podman stats my_nginx
podman top my_nginx
|
3. 数据管理
1 2 3 4 5
| podman run -v /host/path:/container/path nginx
podman cp my_nginx:/etc/nginx/nginx.conf ./
|
🌐 网络与多容器实战(LEMP 环境)
1. 创建自定义网络
1 2 3 4 5
| podman network create lemp --subnet 10.88.0.0/24
podman network ls
|
2. 启动容器集群
1 2 3 4 5 6 7 8 9 10 11
| podman run -d --name nginx --network lemp --ip 10.88.0.10 \ -p 80:80 -v /html:/usr/share/nginx/html nginx
podman run -d --name php-fpm --network lemp --ip 10.88.0.20 \ -v /html:/var/www/html bitnami/php-fpm
podman run -d --name mariadb --network lemp --ip 10.88.0.30 \ -v /sql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret mariadb
|
3. Nginx 连接 PHP-FPM 配置
修改 Nginx 站点配置文件,添加 PHP 处理:
1 2 3 4 5
| location ~ \.php$ { fastcgi_pass 10.88.0.20:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; }
|
4. 测试容器通信
1 2 3 4 5
| podman exec -it nginx ping php-fpm
podman exec -it nginx ping host.containers.internal
|
⚡ 高级特性
1. Pod 管理
Podman 支持 Pod 概念,类似于 Kubernetes 中的 Pod,允许一组容器共享相同的网络、PID 和 IPC 命名空间。
1 2 3 4 5 6 7 8 9 10 11 12 13
| podman pull registry.aliyuncs.com/google_containers/pause:3.2 podman image tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
podman pod create --name mypod
podman run -d --pod mypod --name container1 nginx podman run -d --pod mypod --name container2 alpine ping 8.8.8.8
podman pod ps podman ps --pod
|
2. 特权容器
特权容器突破默认隔离限制,需谨慎使用:
1 2 3 4 5 6 7 8
| podman run --privileged --pid=host alpine ps aux
podman run --net=host nginx
podman run --privileged -v /dev:/dev ubuntu
|
警告:特权容器存在安全风险,仅在必要时使用并配合 --cap-add
精细化授权。
🔄 系统服务与自启动
Podman 可以与 systemd 集成,将容器作为系统服务管理。
1. 生成 systemd 服务文件
1 2 3 4 5 6
| podman generate systemd --new --name nginx > ~/.config/systemd/user/container-nginx.service
systemctl --user enable container-nginx.service systemctl --user start container-nginx.service
|
2. 启用用户级服务持久化
1 2
| sudo loginctl enable-linger $USER
|
🔧 故障排查
1. 常见问题及解决方法
问题一:镜像拉取失败
1 2 3 4 5
| cat /etc/containers/registries.conf
podman pull registry.aliyuncs.com/library/nginx
|
问题二:权限错误
1 2 3 4 5 6 7
| cat /etc/subuid cat /etc/subgid
echo 'kernel.unprivileged_userns_clone=1' | sudo tee /etc/sysctl.d/userns.conf sudo sysctl -p
|
问题三:cgroup 警告
1 2 3
| mkdir -p ~/.config/containers echo -e "[engine]\nevents_logger = \"file\"\ncgroup_manager = \"cgroupfs\"" > ~/.config/containers/containers.conf
|
问题四:端口冲突
1 2 3 4 5
| ss -tulpn | grep :80
podman run -d --name nginx -p 8080:80 nginx
|
📊 命令对比
Podman 与 Docker 命令对比表
功能 |
Docker 命令 |
Podman 命令 |
说明 |
列出容器 |
docker ps |
podman ps |
列出运行中的容器 |
列出镜像 |
docker images |
podman images |
列出本地镜像 |
运行容器 |
docker run |
podman run |
运行容器 |
构建镜像 |
docker build |
podman build |
构建镜像 |
容器编排 |
docker-compose up |
podman-compose up |
启动 compose 项目 |
查看日志 |
docker logs |
podman logs |
查看容器日志 |
执行命令 |
docker exec |
podman exec |
在容器中执行命令 |
📈 性能监控与优化
1. 资源监控
1 2 3 4 5
| podman stats
podman system df
|
2. 资源限制
1 2
| podman run -it --memory=512m --cpus=1.5 alpine
|
3. 清理无用资源
1 2 3 4 5 6 7 8
| podman container prune
podman image prune
podman system prune
|
💎 总结
Podman 是一个强大且安全的容器运行时工具,它以其无守护进程的架构和出色的 rootless 支持而脱颖而出。通过本指南,您应该能够:
- ✅ 在 Debian/Ubuntu 系统上安装和配置 Podman
- ✅ 使用国内镜像加速器提高拉取速度
- ✅ 管理容器和镜像,包括 Pod 的创建和管理
- ✅ 配置容器网络和多容器应用环境
- ✅ 将容器集成到 systemd 系统中作为服务运行
- ✅ 排查常见问题并优化性能
Podman 特别适合希望避免守护进程安全风险的用户,以及需要在非 root 环境下运行容器的场景。随着容器技术的不断发展,Podman 正成为一个越来越受欢迎的 Docker 替代方案。
📚 扩展资源