Podman 是一个开源的容器管理工具,旨在提供与 Docker 类似的体验,但具有更高的安全性和灵活性。本指南将介绍 Podman 是什么、如何安装、配置以及运行容器的基本操作,适合初学者快速上手。
什么是 Podman?
Podman(Pod Manager)是一个无守护进程(daemonless)的容器引擎,用于开发、管理和运行 OCI(Open Container Initiative)容器。它与 Docker 的主要区别在于:
- o 无守护进程:Podman 不依赖后台守护进程,直接以用户权限运行容器,减少安全风险。
- o 兼容 Docker:Podman 支持 Docker 命令行接口(CLI),可以无缝迁移现有 Docker 工作流。
- o 支持 Pods:Podman 引入了 Kubernetes 风格的 Pod 概念,允许在同一 Pod 中运行多个容器。
- o 根权限可选:Podman 支持无根(rootless)模式,普通用户无需 root 权限即可运行容器。
Podman 是红帽(Red Hat)主导的项目,广泛应用于 Linux 环境中,尤其适合企业级容器管理和开发。
Docker vs Podman
以下是询问Kimi得出来的对比表格
特性DockerPodman架构客户端-服务器架构,依赖守护进程(dockerd)无守护进程,直接运行容器根权限默认需要 root 权限运行容器支持 root 和非 root 用户运行容器镜像构建使用 docker build 命令,依赖 BuildKit使用 podman build 命令,依赖 Buildah容器生命周期管理通过守护进程管理容器生命周期基于 systemd 管理容器生命周期安全性守护进程需要 root 权限,存在潜在安全风险无守护进程,支持 rootless 模式,安全性更高网络提供简单的网络模型,支持容器间通信网络配置相对复杂,但与 Kubernetes 的 Pod 概念更接近Docker Compose 支持支持从 3.0 版本开始支持,通过 podman.socket 替代 Docker 守护进程Docker Swarm 支持支持不支持,但可以通过 Nomad 等工具替代SELinux 支持通过模块支持原生支持防火墙交互可能覆盖防火墙规则不覆盖防火墙规则原生支持平台Linux、macOS、WindowsLinux、macOS、Windows(通过 WSL)性能一般性能良好,但在大规模部署或启动时间敏感的环境中可能稍逊于 Podman由于无守护进程架构,容器启动时间更快使用场景开发环境、CI/CD 流水线、生产环境安全性要求高的环境、生产环境、与 Kubernetes 集成许可证Docker Engine 为 Apache License 2.0,Docker Desktop 需要订阅(大企业)完全开源,Apache License 2.0
安装 Podman
Podman 支持多种 Linux 发行版,以下以 Ubuntu 和 CentOS 为例介绍安装步骤。对于其他系统(如 macOS 或 Windows),可以通过 Podman Desktop 或虚拟机运行。
在 Ubuntu 上安装
- 1. 更新系统包索引:sudo apt update
- 2. 安装 Podman:sudo apt install -y podman
- 3. 验证安装:podman --version
- 输出类似 podman version 4.x.x,表示安装成功。
在 CentOS/RHEL 上安装
- 1. 安装 Podman:sudo dnf install -y podman
- 2. 验证安装:podman --version
macOS/Windows 用户
Podman 官方推荐使用 Podman Desktop,一个图形化工具,支持跨平台。或者在 macOS 上通过 Homebrew 安装:
brew install podman
Windows 用户可通过 WSL2(Windows Subsystem for Linux)安装 Linux 发行版后按上述步骤操作。
配置 Podman
1. 配置容器注册表
Podman 默认从 Docker Hub 拉取镜像,但可以添加其他注册表(如 quay.io)。编辑 /etc/containers/registries.conf(需要 root 权限)或用户级配置文件 ~/.config/containers/registries.conf:
[registries.search]
registries = ['docker.io', 'quay.io', 'registry.fedoraproject.org']
2. 无 root模式配置
Podman 支持无root运行,但需要确保系统支持用户命名空间。检查是否支持:
podman info --debug | grep user
若需要启用无root模式,设置 subuid 和 subgid:
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER
3. 配置存储
Podman 的存储配置文件位于 /etc/containers/storage.conf 或 ~/.config/containers/storage.conf。默认使用 overlay 文件系统,可根据需要调整存储驱动或路径。
运行容器
1. 拉取镜像
从 Docker Hub 拉取一个 Nginx 镜像:
podman pull docker.io/library/nginx
2. 运行容器
启动一个 Nginx 容器,映射主机端口 8080 到容器端口 80:
podman run -d -p 8080:80 nginx
- o -d:后台运行容器。
- o -p:端口映射,格式为 主机端口:容器端口。
访问 http://localhost:8080,即可看到 Nginx 欢迎页面。
3. 查看运行中的容器
列出所有运行中的容器:
podman ps
列出所有容器(包括已停止的):
podman ps -a
4. 管理容器
- o 停止容器:podman stop <container_id>
- o 删除容器:podman rm <container_id>
- o 查看容器日志:podman logs <container_id>
5. 创建和运行 Pod
Podman 支持 Kubernetes 风格的 Pod,允许多个容器共享网络和存储。创建一个 Pod:
podman pod create --name mypod
在 Pod 中运行两个容器:
podman run -d --pod mypod nginx
podman run -d --pod mypod redis
查看 Pod 状态:
podman pod ls
6. 构建自定义镜像
Podman 支持使用 Containerfile 或 Dockerfile 构建镜像。创建一个简单的 Containerfile:
FROM nginx:latest
COPY index.html /usr/share/nginx/html
构建镜像:
podman build -t my-nginx .
运行自定义镜像:
podman run -d -p 8080:80 my-nginx
常见问题
Podman vs Docker
- o Podman:无守护进程、支持无根运行、原生支持 Pod。
- o Docker:依赖守护进程、需要 root 权限(除非配置 Docker rootless)。
- o 参考上方对比表格
迁移 Docker 工作流
Podman 提供 Docker 兼容的 CLI,可以直接使用 Docker 命令。例如,docker run 可替换为 podman run。若需要 Docker CLI 兼容性,可创建别名:
alias docker=podman
性能优化
- o 使用 --storage-driver=overlay 提高性能。
- o 定期清理未使用的镜像和容器:podman system prune
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏并分享给更多开发者!让我们一起学习,共同进步!