Podman 入门

内容纲要

查看「Docker & Kubernetes 专题」获取更多相关内容


什么是容器

容器是一种虚拟化技术,可以把一个应用程序及其所有依赖和运行环境打包到一个可移植的映像文件中。这样就解决了「这在我的机器上是可以正常运行的啊,怎么到你那就不行了」的问题,确保应用程序可以在不同环境中以相同的方式运行。

什么是 Podman

Podman 是一个无守护进程、开源的、本地化的 Linux 工具,旨在通过使用开放容器倡议(OCI)容器和容器镜像,轻松查找、运行、构建、分享和部署应用程序。

Podman 提供了一个命令行界面(CLI),对于曾经使用过 Docker 容器引擎的人来说,会感到非常熟悉。大多数用户可以简单地将 Docker 别名为 Podman(alias docker=podman)而不会遇到任何问题。与其他常见的容器引擎(如 Docker、CRI-O、containerd)类似,Podman 依赖于符合 OCI 规范的容器运行时(如 runc、crun、runv 等)来与操作系统进行交互并创建运行中的容器。这使得由 Podman 创建的运行中的容器几乎无法与其他常见容器引擎创建的容器区分开来。

在Podman的控制下,容器可以由root用户或非特权用户运行。Podman通过libpod库来管理整个容器生态系统,其中包括pod、容器、容器镜像和容器卷。Podman专注于所有有助于您维护和修改OCI容器镜像的命令和功能,如拉取和标记。它允许您在生产环境中创建、运行和维护这些容器和容器镜像。

Podman 和 Docker 有什么区别

Podman 和 Docker 的区别主要表现为 daemon-less 和 root-less。

在使用 Docker CLI 或 Docker Desktop 时,实际上是在与后台被称为 Docker daemon 的守护进程交互,它通常被称为 Docker Engine,负责所有繁重的工作如创建容器、构建映像等等。它作为系统进程在后台并以 root 权限运行。这就是所谓的客户端/服务器架构。

Docker 守护进程默认以 root 用户运行,存在安全隐患。Podman 可以以普通用户权限运行容器,因为它不需要特权访问,这大大提升了安全性。

Podman 在架构上有些不同。Podman 使用一种称为 fork exec 模型的东西,一切都是从客户端自身执行的,因此当创建容器时 Podman 实际上是在 fork 自身,然后该子进程就成为容器,所以这种架构上的差异使得 Podman 独一无二,并使其在容器引擎方面更加高效、轻量和安全。

此外 Podman 还引入了 pod 的概念。一个 pod 可以包含多个共享网络和存储的容器,类似 Kubernetes 中的 pod。这在开发和测试 Kubernetes 应用时非常有用。你甚至可以直接导出 Podman 的 pod 配置为 Kubernetes 的 yaml 文件。

总结一下,Podman 是一个现代的容器引擎,具有更好的安全性和效率。它是 Docker 的一个可靠替代品。对于需要管理容器的开发者来说 Podman 绝对是一个值得考虑采用的选择。

安装 Podman

安装 Podman 可以参照官方文档 Podman Installation Instructions 对于各平台都有很详细的安装方法,对于 Windows 平台,Podman 也推出了类似 Docker Desktop 的 Podman Desktop。

Podman 使用

在安装 Podman 后可以通过查看版本来检查是否成功安装:

podman version # 或 podman -v

能看到返回版本号表示安装成功了

# 搜索映像
# 搜索 Docker Hub 上的 NGINX 映像
podman search docker.io/nginx
# 搜索 Quay 上的 NGINX 映像
podman search quay.io/nginx

# 拉取映像
# 拉取 Docker Hub 上 Docker Official Image 的 NGINX 映像
podman image pull docker.io/library/nginx

除此之外大多数使用方法都可以简单的将 docker 命令换成 podman 命令,如果你已经很熟悉 Docker 的 CLI 使用,那么 Podman 也可以说是手到擒来。