Podman 教程

Podman 导出 / 导入镜像,实现离线传输

和 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

更多信息请参考官方文档。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号