1. 简介

Podman 是一个无守护进程的容器引擎,它提供了与 Docker 类似的许多功能,包括从容器仓库拉取镜像。虽然 Docker Hub 是广泛使用的镜像仓库,但使用 Podman 访问 Docker Hub 镜像时需要一些特定的配置。

本文将介绍几种使用 Podman 从 Docker Hub 拉取官方镜像的方法。我们将以 Ubuntu Linux 系统为例来演示相关命令。

2. 安装 Podman

首先,我们需要更新系统软件包列表,并使用 apt 安装 Podman:

$ sudo apt update
$ sudo apt install podman

安装完成后,可以通过查看版本号确认是否安装成功:

$ podman --version
podman version 5.2.3

这表示 Podman 已成功安装在系统中。

3. 理解 Podman 的镜像拉取机制

在开始拉取 Docker Hub 官方镜像之前,有必要了解 Podman 的基本命令结构。我们使用以下命令拉取镜像:

$ podman pull <image_name>

该命令会从 Podman 配置的默认仓库中查找指定镜像。⚠️ 如果未指定标签(tag),Podman 默认会拉取 latest 版本的镜像

4. 使用完整仓库地址拉取官方镜像

从 Docker Hub 拉取官方镜像时,必须使用完整的仓库地址,否则可能会遇到 invalid reference format404 not found 错误。Podman 使用全限定名(Fully Qualified Name)来识别镜像,包括仓库域名、镜像路径和标签(如有)。

例如,我们拉取 官方 Postgres 镜像

$ podman pull docker.io/library/postgres
Trying to pull docker.io/library/postgres:latest...
Getting image source signatures
...| 
Copying blob 28b27d53d86b done   | 
Copying blob bfc263366b3f done   | 
Copying blob e5ff51eeda62 done   | 
Copying config f0dfc903a6 done   | 
Writing manifest to image destination
f0dfc903a6636f2648135b399caf4dcd9f5f595b485672ca96cd91d9fa48110c

命令中包含以下部分:

  • docker.io:Docker Hub 的域名
  • library/postgres:官方镜像路径(所有官方镜像都位于 library 命名空间下)

这样我们就成功拉取了官方 PostgreSQL 镜像,可用于容器化部署。

5. 使用非全限定名拉取镜像

我们可以配置 Podman,使其将 Docker Hub 设为默认仓库之一,从而省略 docker.io/library/ 前缀。

编辑 Podman 的配置文件:

$ sudo nano /etc/containers/registries.conf

在配置中添加 Docker Hub 到非全限定搜索仓库列表:

unqualified-search-registries = ["docker.io"]

保存后,就可以使用更简洁的命令拉取镜像了。

例如,拉取 官方 Nginx 镜像

$ podman pull nginx
Resolving "nginx" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/library/nginx:latest...
... 
Copying blob 55af3c8febf2 done   | 
Copying blob 4b563e5e980a done   | 
Copying blob 85177e2c6f39 done   | 
Copying config 7f553e8bbc done   | 
Writing manifest to image destination
7f553e8bbc897571642d836b31eaf6ecbe395d7641c2b24291356ed28f3f2bd0

这样就无需使用全限定名,也能成功拉取 nginx 镜像。

6. 使用特定标签拉取镜像

除了拉取 latest 版本,我们还可以通过指定标签(tag)来拉取特定版本的镜像。标签通常代表容器内软件的版本

例如,拉取 Python 3.10 版本的镜像:

$ podman pull docker.io/library/python:3.10
Trying to pull docker.io/library/python:3.10...
Getting image source signatures
...
Copying blob 01272fe8adba done   | 
Copying blob 2503de423c42 done   | 
Copying blob fddd6c71e764 done   | 
Copying config c780c1edc8 done   | 
Writing manifest to image destination
c780c1edc88f3c7244e1b75cae5a7f8df8cf33461e25d67e916dc76a3218b2cf

这样我们就拉取了 Python 3.10 而不是默认的 latest 版本。

7. 使用短名称别名(Short Name Alias)

除了非全限定搜索仓库,我们还可以在 Podman 中配置短名称别名,避免每次都输入完整的仓库路径。

编辑短名称配置文件:

$ nano /etc/containers/registries.conf.d/shortnames.conf

例如,我们经常从 Oracle 容器仓库拉取 Oracle Linux 镜像,可以添加如下别名:

[aliases]
  "orclinx" = "container-registry.oracle.com/os/oraclelinux"

之后就可以使用别名拉取镜像:

$ podman pull orclinx
Resolved "orclinx" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull container-
...
Copying config d788eca028 done   | 
Writing manifest to image destination
d788eca028a0f49b6bc70b251c8535b16ee5bd94e0ab375ca8f3a923e6ce4281

这种方式在频繁拉取特定仓库镜像时非常方便,也能提高命令的一致性。

8. 小结

本文我们介绍了如何在 Ubuntu 系统上安装 Podman,并演示了多种从 Docker Hub 拉取官方镜像的方式,包括:

✅ 使用全限定名拉取
✅ 配置默认仓库以使用非全限定名
✅ 使用特定标签拉取指定版本
✅ 配置短名称别名简化命令

这些功能让 Podman 成为一个强大且灵活的 Docker 替代方案,尤其适合对容器管理有较高要求的开发者和运维人员。


原始标题:Pull Official Images From Docker Hub Using Podman