【Docker】迁移镜像:save和load(保存/加载镜像),export和import(导出容器/导入镜像)
在 Docker 中,可以使用 导出(export/import) 和 保存(save/load) 两种方式来迁移镜像。它们的区别如下:
方法 | 适用场景 | 主要作用 | 是否包含历史层 |
---|---|---|---|
docker save / docker load | 备份和共享完整镜像 | 包含所有历史层和元数据 | ✅ 是 |
docker export / docker import | 备份和传输运行中的容器 | 只包含最终文件系统 | ❌ 否 |
📌 方法 1:使用 save
和 load
导出/导入镜像(推荐)
如果你需要备份、迁移或共享 完整的 Docker 镜像(包括历史层),请使用 docker save
和 docker load
。
1️⃣ 导出镜像
使用 docker save
将 Docker 镜像保存为 .tar
文件:
docker save -o myimage.tar myimage:latest
或者:
docker save myimage:latest > myimage.tar
这里:
-o myimage.tar
指定导出的文件名myimage:latest
是要导出的镜像名称(可以带:tag
)
2️⃣ 传输文件
你可以用 scp
或 rsync
将 myimage.tar
复制到另一台服务器:
scp myimage.tar user@remote-server:/path/to/destination/
3️⃣ 导入镜像
在目标服务器上,使用 docker load
重新导入镜像:
docker load -i myimage.tar
或者:
cat myimage.tar | docker load
4️⃣ 验证镜像
导入完成后,运行以下命令确认镜像是否成功加载:
docker images
如果列表中包含 myimage:latest
,则说明导入成功。
📌 方法 2:使用 export
和 import
迁移容器
如果你需要备份 已运行的容器(但不包括历史层),请使用 docker export
和 docker import
。
1️⃣ 导出运行中的容器
首先,找到容器 ID:
docker ps -a
然后使用 docker export
导出容器:
docker export -o mycontainer.tar <CONTAINER_ID>
或者:
docker export <CONTAINER_ID> > mycontainer.tar
2️⃣ 传输文件
同样,你可以使用 scp
传输文件:
scp mycontainer.tar user@remote-server:/path/to/destination/
3️⃣ 在目标机器上导入
使用 docker import
创建一个新的镜像:
docker import mycontainer.tar mynewimage:latest
如果你希望带有作者信息:
cat mycontainer.tar | docker import - mynewimage:latest
4️⃣ 验证
导入后,查看新镜像:
docker images
然后可以用 docker run
运行它:
docker run -it mynewimage:latest /bin/bash
📌 主要区别总结
方式 | 适用场景 | 是否保留历史层 | 是否包含元数据 | 是否包含环境变量 |
---|---|---|---|---|
docker save/load | 完整镜像备份 | ✅ 是 | ✅ 是 | ✅ 是 |
docker export/import | 容器文件系统备份 | ❌ 否 | ❌ 否 | ❌ 否 |
一般情况下,推荐使用 save/load
方式,因为它可以保留所有的 Docker 层和元数据,而 export/import
方式更适合仅迁移容器的最终状态。