1. 概述
在使用 Docker 的过程中,我们经常需要将镜像保存为一个 tar 文件,以便于共享、迁移或归档。这个 tar 文件包含了完整的镜像内容,具备良好的可移植性,适用于跨环境传输、离线部署或版本备份等场景。
本文将介绍如何使用 docker save
和 docker 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 save
和 docker load
命令进行镜像的打包和加载操作。这是 Docker 中非常实用的功能,特别适用于以下场景:
- ✅ 离线环境部署
- ✅ 跨环境迁移镜像
- ✅ 定期备份镜像
- ✅ 安全隔离传输
通过这种方式,我们可以灵活地管理镜像的生命周期,避免对 Docker Hub 的依赖,提高部署的灵活性和安全性。
📌 Tips:导出的 tar 文件体积较大,建议在非生产环境中使用;加载镜像时注意版本一致性,避免因镜像内容差异导致运行异常。