1. 概述

在使用 Docker 的过程中,我们经常需要将镜像保存为一个 tar 文件,以便于共享、迁移或归档。这个 tar 文件包含了完整的镜像内容,具备良好的可移植性,适用于跨环境传输、离线部署或版本备份等场景。

本文将介绍如何使用 docker savedocker load 命令,将 Docker 镜像保存为 tar 文件,并从 tar 文件中重新加载镜像。


2. 将 Docker 镜像保存为 Tar 文件

首先,我们可以通过 docker images 查看当前系统中已有的镜像:

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nginx         latest    447a8665cc1d   7 weeks ago     273MB
ubuntu        latest    8a37d68f4f73   2 months ago    117MB
redis         latest    878983f8f504   2 months ago    174MB
mysql         latest    d8df06984890   2 months ago    802MB
hello-world   latest    53cc4d415d83   17 months ago   24.4kB

接下来,我们使用 docker save 命令将 nginx 镜像导出为名为 my-nginx.tar 的 tar 文件:

$ docker save nginx -o my-nginx.tar

也可以使用重定向方式实现相同效果:

$ docker save nginx > my-nginx.tar

导出完成后,我们可以使用 ls 命令确认文件是否生成:

$ ls C:\Users\thinkpad

    Directory: C:\Users\thinkpad

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         9/22/2024   6:51 PM                .docker
d-r---         9/21/2024   8:54 PM                Desktop
-a----          9/2/2024  12:35 AM       71040000 my-nginx.tar

✅ 此时,my-nginx.tar 已成功创建。我们可以将它复制到其他机器上,或本地保留以备后续使用。

为了验证加载流程,我们先将 nginx 镜像从本地删除:

$ docker rmi nginx   
Untagged: nginx:latest
Deleted: sha256:447a8665cc1dab95b1ca778e162215839ccbb9189104c79d7ec3a81e14577add

再次查看镜像列表,确认 nginx 已被删除:

$ docker images   
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        latest    8a37d68f4f73   2 months ago    117MB
redis         latest    878983f8f504   2 months ago    174MB
mysql         latest    d8df06984890   2 months ago    802MB
hello-world   latest    53cc4d415d83   17 months ago   24.4kB

3. 从 Tar 文件加载 Docker 镜像

现在我们使用 docker load 命令将镜像从 tar 文件中加载回来:

$ docker load -i my-nginx.tar
Loaded image: nginx:latest

也可以使用管道方式加载:

$ docker load < my-nginx.tar
Loaded image: nginx:latest

⚠️ 注意:-i 参数用于指定输入文件路径;如果使用重定向,则不需要 -i

✅ 此时,nginx 镜像已经重新加载到 Docker 环境中。


4. 验证加载的镜像

我们再次运行 docker images 查看是否恢复成功:

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nginx         latest    447a8665cc1d   7 weeks ago     273MB
ubuntu        latest    8a37d68f4f73   2 months ago    117MB
redis         latest    878983f8f504   2 months ago    174MB
mysql         latest    d8df06984890   2 months ago    802MB
hello-world   latest    53cc4d415d83   17 months ago   24.4kB

可以看到,nginx 镜像已恢复,包括创建时间、镜像 ID、大小等元数据都与之前完全一致。这说明 Docker 在保存和加载过程中完整保留了镜像信息。


5. 小结

本文我们介绍了如何使用 docker savedocker load 命令进行镜像的打包和加载操作。这是 Docker 中非常实用的功能,特别适用于以下场景:

  • ✅ 离线环境部署
  • ✅ 跨环境迁移镜像
  • ✅ 定期备份镜像
  • ✅ 安全隔离传输

通过这种方式,我们可以灵活地管理镜像的生命周期,避免对 Docker Hub 的依赖,提高部署的灵活性和安全性。


📌 Tips:导出的 tar 文件体积较大,建议在非生产环境中使用;加载镜像时注意版本一致性,避免因镜像内容差异导致运行异常。


原始标题:Load a Docker Image From a Tar File