我的系统上有以下镜像列表,我想将所有镜像复制到远程的其他计算机上:
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 images建议的方法save
和load
,但我相信一定有更好的方法来处理所有镜像。
如果要一次性导出所有镜像,则会创建一个大的 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 "a-z 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
你可能还想保存镜像列表,以便对恢复的镜像进行标记:
docker images | sed '1d' | awk '{print $1 " " $2 " " $3}' > mydockersimages.list
在远程计算机上,可以加载(导入)镜像:
docker load -i /path/to/save/mydockersimages.tar
并tag导入的镜像:
while read REPOSITORY TAG IMAGE_ID do echo "== Tagging $REPOSITORY $TAG $IMAGE_ID ==" docker tag "$IMAGE_ID" "$REPOSITORY:$TAG" done < mydockersimages.list
在 windows 上时,命令有点不同。
docker save $(docker images --format '{{.Repository}}:{{.Tag}}') -o allinone.tar
以及加载命令:
docker load -i allinone.tar
将带有
name:tag
的所有镜像保存到一个 tar 文件中:docker save $(docker images | sed '1d' | awk '{print $1 ":" $2 }') -o allinone.tar
然后, 加载所有images:
docker load -i allinone.tar
你的答案