Docker 有 export / importsave / load 两种方式来实现容器的迁移和备份。但应用场景有显著不同。

TL,DR: 要迁移和备份成直接能在新设备上 Run 的镜像,用 save / load。只要备份根文件系统,用 export

Docker Save / Load

Docker Save 只能保存 镜像 到 STDIN / Tarball。-o 参数

docker save -o image.tgz IMAGE

如果需要保存容器,需要先保存容器到镜像,然后再用上面的 Save 命令保存到 Tarball。

docker commit -p CONTAINER IMAGE

然后将 Tarball 传到另一台设备上,使用 Load 导入镜像。Load 可以从文件或 STDIN 接收 Tarball。用 -i 参数从文件系统导入 Tarball。

docker load -i TARBALL

这时新导入的镜像是没有名称的,只有 ID。可以用 Tag 命令打上标签。

docker tag IMAGE_ID IMAGE_NAME

然后就可以愉快的用新的 IMAGE_NAME 在新的设备上启动容器了。启动后会发现和原有容器是一致的。

Docker Export / Import

Export 和 Save 的区别在与 Export 不会保存 Metadata,只会导出根文件系统。而离开 metadata,镜像是不能运行的。