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 format 或 404 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 替代方案,尤其适合对容器管理有较高要求的开发者和运维人员。