> 技术文档 > Podman 快速上手指南:替代 Docker 的新选择

Podman 快速上手指南:替代 Docker 的新选择

Podman 是一个开源的容器管理工具,旨在提供与 Docker 类似的体验,但具有更高的安全性和灵活性。本指南将介绍 Podman 是什么、如何安装、配置以及运行容器的基本操作,适合初学者快速上手。

什么是 Podman?

Podman(Pod Manager)是一个无守护进程(daemonless)的容器引擎,用于开发、管理和运行 OCI(Open Container Initiative)容器。它与 Docker 的主要区别在于:

  • 无守护进程:Podman 不依赖后台守护进程,直接以用户权限运行容器,减少安全风险。
  • 兼容 Docker:Podman 支持 Docker 命令行接口(CLI),可以无缝迁移现有 Docker 工作流。
  • 支持 Pods:Podman 引入了 Kubernetes 风格的 Pod 概念,允许在同一 Pod 中运行多个容器。
  • 根权限可选:Podman 支持无根(rootless)模式,普通用户无需 root 权限即可运行容器。

Podman 是红帽(Red Hat)主导的项目,广泛应用于 Linux 环境中,尤其适合企业级容器管理和开发。

Docker vs Podman

以下是询问Kimi得出来的对比表格

特性 Docker Podman 架构 客户端-服务器架构,依赖守护进程(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、Windows Linux、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模式,设置 subuidsubgid

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
  • -d:后台运行容器。
  • -p:端口映射,格式为 主机端口:容器端口

访问 http://localhost:8080,即可看到 Nginx 欢迎页面。

3. 查看运行中的容器

列出所有运行中的容器:

podman ps

列出所有容器(包括已停止的):

podman ps -a

4. 管理容器

  • 停止容器

    podman stop <container_id>
  • 删除容器

    podman rm <container_id>
  • 查看容器日志

    podman logs <container_id>

5. 创建和运行 Pod

Podman 支持 Kubernetes 风格的 Pod,允许多个容器共享网络和存储。创建一个 Pod:

podman pod create --name mypod

在 Pod 中运行两个容器:

podman run -d --pod mypod nginxpodman run -d --pod mypod redis

查看 Pod 状态:

podman pod ls

6. 构建自定义镜像

Podman 支持使用 ContainerfileDockerfile 构建镜像。创建一个简单的 Containerfile

FROM nginx:latestCOPY index.html /usr/share/nginx/html

构建镜像:

podman build -t my-nginx .

运行自定义镜像:

podman run -d -p 8080:80 my-nginx

常见问题

Podman vs Docker

  • Podman:无守护进程、支持无根运行、原生支持 Pod。
  • Docker:依赖守护进程、需要 root 权限(除非配置 Docker rootless)。
  • 参考上方对比表格

迁移 Docker 工作流

Podman 提供 Docker 兼容的 CLI,可以直接使用 Docker 命令。例如,docker run 可替换为 podman run。若需要 Docker CLI 兼容性,可创建别名:

alias docker=podman

性能优化

  • 使用 --storage-driver=overlay 提高性能。
  • 定期清理未使用的镜像和容器:
    podman system prune

总结

Podman 是一个功能强大且安全的容器管理工具,适合开发者和企业用户。通过本指南,你可以快速安装 Podman,配置环境,并开始运行和管理容器。Podman 的无根模式和 Pod 支持使其在现代容器化工作流中独具优势。

欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节