如何保存所有docker图像并复制到另一台机器?

我有我的系统上存在的图像列表,希望将所有这些图像复制到远程机器。

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE u14_py269 latest 6a1ec0b508b3 4 days ago 885.9 MB u12_py273 latest c2a804894851 4 days ago 686 MB u12_core latest 0d61eba80df2 4 days ago 629.1 MB c6_py266 latest cb1a94742d59 4 days ago 1.32 GB c6_core latest 77c2ed19d87f 4 days ago 1.278 GB c7_py275 latest bb1d3de68452 4 days ago 1.117 GB c7_core latest ca14a76e9cca 4 days ago 1.081 GB u14_py35 latest d110c7e4a1f5 5 days ago 914.5 MB u14_py34 latest 085a37cb8614 5 days ago 830.7 MB u14_py276 latest 8927c6167930 5 days ago 834.1 MB u14_core latest 93ead5abc25b 5 days ago 776.9 MB centos centos6 36877b5acebb 5 days ago 228.9 MB ubuntu latest 36248ae4a9ac 5 days ago 188 MB ubuntu 12.04 94a7cb19a65b 5 days ago 137.8 MB edgester/gerrit latest ce4e3238052a 6 days ago 735.2 MB u14_as374_py276 latest fa5fb7189d70 11 days ago 1.497 GB c721_as373_py275 latest 03ccf6961d0c 11 days ago 844.3 MB c721_as373_py35 latest b5fece3dd45b 11 days ago 1.127 GB c171_con_core latest 8af0d24a38a0 2 weeks ago 377.2 MB u14_as374_php55 latest 29df638e363a 3 weeks ago 1.073 GB j_u14_as374_php55 latest 29df638e363a 3 weeks ago 1.073 GB centos centos7 c8a648134623 8 weeks ago 196.6 MB centos latest c8a648134623 8 weeks ago 196.6 MB j_u14_as374_py276 latest 28f379d60882 10 weeks ago 871.5 MB ubuntu 14.04 89d5d8e8bafb 10 weeks ago 187.9 MB 

目前我正在使用保存并加载docker镜像的方法 ,相信一定有更好的办法来处理所有镜像。

如果要一次性导出所有图像,请创build一个大的tar文件:

 docker save $(docker images -q) -o /path/to/save/mydockersimages.tar 

如果要将多个图像保存在一个.tar文件中,请执行以下操作:

 IDS=$(docker images | awk '{if ($1 ~ /^(debian|centos)/) print $3}') docker save $IDS -o /path/to/save/somedockersimages.tar 

最后,如果要导出多个图像,每个图像一个.tar文件(不是磁盘高效:每个.tar文件中都保存常用图层):

 docker images | awk '{if ($1 ~ /^(openshift|centos)/) print $1 " " $2 " " $3 }' | tr -c "az A-Z0-9_.\n-" "%" | while read REPOSITORY TAG IMAGE_ID do echo "== Saving $REPOSITORY $TAG $IMAGE_ID ==" docker save -o /path/to/save/$REPOSITORY-$TAG-$IMAGE_ID.tar $IMAGE_ID done 

在远程机器上 ,您可以load (导入)图像:

 docker load -i /path/to/save/mydockersimages.tar 

有关保存/加载的更多信息,请阅读: 如何在不通过存储库的情况下将Docker镜像从一台主机复制到另一台主机?

使用registry,你可以有一个类似于Git的工作stream程。 在本地修改您的容器,将更改提交到本地映像,然后将映像推送到registry。 然后,您可以从您的远程机器上拉出图像。

您可以使用公共Docker Hub,也可以设置您自己的registry服务器。

https://docs.docker.com/registry/

您可以使用bash遍历每个docker images运行docker save -o <save image to path> <image name> docker images的响应(假设您将它们全部保存到一个文件夹中),您可以将其压缩并scp到远程主机。