和 Docker 一样,Podman 也支持镜像的导入/导出。
镜像导出是指将本地镜像仓库中的一个或多个镜像,包括其所有的分层文件系统、配置信息、元数据(如标签、作者信息)等,打包成一个 tar 归档文件的过程。导出的 tar 文件可以保存在云存储、磁盘上,对重要镜像进行备份。
镜像导入则与镜像导出相反,是指将一个之前通过 podman save 命令导出的、包含完整镜像层和元数据的 tar 归档文件,恢复成 Podman 守护进程可以识别和管理的镜像对象的过程。即一个可以用来创建容器的镜像。这对使用备份镜像恢复重要镜像很重要。
Podman 的镜像导入(load)和导出(save)主要有如下用途:
(1)离线环境中的镜像传输与部署:这是最常见的用途。在没有互联网连接或网络受限的环境中,你无法直接从 Docker Hub 等镜像仓库拉取镜像。通过在有网络的机器上导出镜像为文件,然后通过 U 盘、移动硬盘等物理介质传输到离线机器,再导入即可使用。
(2) 镜像备份与恢复:可以将重要的、定制化的镜像导出为文件进行备份,防止因误操作或系统故障导致镜像丢失。当需要时,可以随时将备份文件导入恢复镜像,确保环境的一致性和可重现性。
(3)镜像分享与分发:无需依赖公共镜像仓库,就可以直接将镜像文件分享给同事、合作伙伴或客户。适用于分享包含敏感信息或定制化内容的内部镜像。
(4)构建流程中的镜像传递:在 CI/CD 流水线中,可以将构建好的镜像导出为文件,作为制品传递到后续的测试或部署阶段,确保各阶段使用的是同一个镜像版本。
Podman 使用 podman save 命令将镜像导出为 tar 归档文件。
podman save 命令基础格式如下:
podman save [选项] [镜像名称[:标签] | 镜像ID]...
常用选项:
-o, --output=文件 指定输出文件路径(最常用)
--format=格式 指定输出格式(docker-archive, oci-archive, oci-dir, docker-dir)
-q, --quiet 静默模式,减少输出信息
--compress 压缩镜像层(需要配合格式使用)
点击查看 podman save 命令手册。
(1)导出单个镜像到指定文件,例如:
# 将 nginx 最新版本镜像导出到 nginx.tar 文件 podman save -o nginx.tar nginx:latest # 示例 C:\Users\Administrator> podman save -o nginx.tar nginx:latest C:\Users\Administrator> dir | findstr nginx.tar 2025/11/20 13:34 155,503,616 nginx.tar
(2)导出多个镜像到同一个文件,例如:
# 将 nginx 和 redis 两个镜像导出到 my_images.tar 文件 podman save -o my_images.tar nginx:latest redis:latest # 示例 C:\Users\Administrator> podman save -o my_images.tar nginx:latest redis:latest C:\Users\Administrator> dir | findstr my_images.tar 2025/11/20 13:36 297,216,000 my_images.tar
(3)使用镜像ID导出,例如:
# 将镜像 60adc2e137e7 导出到 app.tar podman save -o app.tar 60adc2e137e7 # 示例 C:\Users\Administrator> podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/redis latest 1c390e3bb5cb 32 hours ago 142 MB docker.io/library/nginx latest 60adc2e137e7 2 days ago 155 MB C:\Users\Administrator> podman save -o app.tar 60adc2e137e7 C:\Users\Administrator> dir | findstr app.tar 2025/11/20 13:38 155,503,616 app.tar
(4)导出为压缩格式,例如:
# 适合 Linux 系统 # 通过管道符将 podman save 导出的镜像压缩为 nginx.tar.gz podman save nginx:latest | gzip > nginx.tar.gz # 示例 [user@CDLPF2YBXYD ~]$ podman save nginx:latest | gzip > nginx.tar.gz [user@CDLPF2YBXYD ~]$ ls nginx.tar.gz script.sh [user@CDLPF2YBXYD ~]$
(5)指定输出格式,例如:
# 通过 --format 指定导出镜像的格式 podman save --format oci-archive -o nginx-oci.tar nginx:latest # 示例 C:\Users\Administrator> podman save --format oci-archive -o nginx-oci.tar nginx:latest C:\Users\Administrator> dir | findstr nginx-oci 2025/11/20 13:43 62,816,256 nginx-oci.tar
Podman 使用 podman load 命令从 tar 归档文件导入镜像。
podman load 语法格式如下:
podman load [选项]
常用选项
-i, --input=文件:指定要导入的文件路径(最常用)
-q, --quiet:静默模式,减少输出信息
点击查看 podman load 命令手册。
(1)从文件导入,例如:
# 将 nginx.tar 文件中的镜像导入到本地仓库 podman load -i nginx.tar # 示例 # 查看本地 nginx.tar C:\Users\Administrator> dir | findstr nginx.tar 2025/11/20 13:47 155,503,616 nginx.tar # 查看本地镜像,只有一个镜像 C:\Users\Administrator> podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/redis latest 1c390e3bb5cb 32 hours ago 142 MB # 加载 nginx.tar 镜像 C:\Users\Administrator> podman load -i nginx.tar Loaded image: docker.io/library/nginx:latest # 查看本地镜像,nginx 镜像导入成功 C:\Users\Administrator> podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/redis latest 1c390e3bb5cb 32 hours ago 142 MB docker.io/library/nginx latest 60adc2e137e7 2 days ago 155 MB
(2)从压缩文件导入,例如:
# 在 linux 中执行 podman load -i nginx.tar.gz # 示例 [user@CDLPF2YBXYD ~]$ ls -l total 209640 -rw-r--r-- 1 user user 155503616 Nov 20 13:47 nginx.tar -rw-r--r-- 1 user user 59161789 Nov 20 13:48 nginx.tar.gz -rwxrwxr-- 1 user user 36 Nov 12 17:34 script.sh [user@CDLPF2YBXYD ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/redis latest 1c390e3bb5cb 32 hours ago 142 MB [user@CDLPF2YBXYD ~]$ podman load -i nginx.tar.gz Getting image source signatures Copying blob 388bb4cadb9e done | Copying blob 70a290c5e58b done | Copying blob 1e79db1a7c1e done | Copying blob 008ba900efa1 done | Copying blob fe0771a36433 done | Copying blob 5f0d4d15245b done | Copying blob 38d44e06fd01 done | Copying config 60adc2e137 done | Writing manifest to image destination Loaded image: docker.io/library/nginx:latest [user@CDLPF2YBXYD ~]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/redis latest 1c390e3bb5cb 32 hours ago 142 MB docker.io/library/nginx latest 60adc2e137e7 2 days ago 155 MB
(3)通过管道方式,从标准输入导入,例如:
# 例如 cat nginx.tar | podman load # 示例 [user@CDLPF2YBXYD ~]$ ll -l total 209640 -rw-r--r-- 1 user user 155503616 Nov 20 13:47 nginx.tar -rw-r--r-- 1 user user 59161789 Nov 20 13:48 nginx.tar.gz -rwxrwxr-- 1 user user 36 Nov 12 17:34 script.sh [user@CDLPF2YBXYD ~]$ cat nginx.tar | podman load Getting image source signatures Copying blob 388bb4cadb9e done | Copying blob 70a290c5e58b done | Copying blob 008ba900efa1 done | Copying blob 1e79db1a7c1e done | Copying blob 5f0d4d15245b done | Copying blob fe0771a36433 done | Copying blob 38d44e06fd01 done | Copying config 60adc2e137 done | Writing manifest to image destination Loaded image: docker.io/library/nginx:latest
更多信息请参考官方文档。