Docker镜像加载tar文件的实用操作指南

在日常运维工作中,经常会遇到需要把一个已经打包好的 ref="/tag/2019/" style="color:#874873;font-weight:bold;">Docker 镜像从一台机器迁移到另一台无法联网或网络受限的服务器上。这时候,用 docker save 导出的 tar 文件就派上用场了。而如何正确加载这个 tar 文件,就成了关键一步。

为什么要用 tar 文件加载镜像?

比如公司内网服务器不允许访问公网,但开发同事给了一版新服务镜像。你没法直接 docker pull,只能通过离线方式传输。最常见的做法就是把镜像保存为 tar 包,通过 U 盘或内网传输后,在目标机器上加载使用。

如何加载 Docker 镜像的 tar 文件

Docker 提供了 docker load 命令来完成这个任务。操作非常简单,假设你已经拿到一个名为 myapp-v1.tar 的镜像包:

docker load < myapp-v1.tar

也可以写成:

docker load --input myapp-v1.tar

两种写法效果一样。执行后,Docker 会解压并注册镜像到本地仓库中。你可以通过 docker images 查看是否成功加载。

顺便复习:如何生成这个 tar 文件?

如果你也需要从现有镜像生成 tar 包,可以用 docker save。例如:

docker save -o myapp-v1.tar myapp:latest

这条命令会把名为 myapp:latest 的镜像保存为当前目录下的 myapp-v1.tar。支持同时打包多个镜像:

docker save -o all-images.tar redis:alpine nginx:stable mysql:5.7

常见问题注意点

加载时如果提示“no such file or directory”,先检查文件路径是否正确。建议进入 tar 所在目录再执行命令,避免路径错误。

另外,tar 文件可能比较大,传输过程中别忘了校验完整性。可以提前用 md5sumsha256sum 计算指纹,确保没传坏。

还有一点容易忽略:镜像加载后不会自动启动容器。你需要根据原有配置,用 docker rundocker-compose 来部署服务。

小技巧:压缩节省空间

导出时可以配合 gzip 压缩,减小体积:

docker save myapp:latest | gzip > myapp-v1.tar.gz

对应地,加载时也要解压:

gunzip -c myapp-v1.tar.gz | docker load

或者用简写:

zcat myapp-v1.tar.gz | docker load

这种方式在传输大镜像时特别实用,能省下不少时间和带宽。