Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to save all Docker images and copy to another machine

Tags:

docker

I have the below list of images present on my system and want to copy all these images to a remote machine.

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 

Currently I am using method suggested in save and load Docker images, but I believe there must be a better way to deal with all images.

like image 443
Pavan Gupta Avatar asked Feb 23 '16 10:02

Pavan Gupta


People also ask

Can you copy a docker image to another machine?

In order to transfer a Docker image from one server to another, what you need to do is first export the image to a file, then copy that file over from your current server to the new one using scp or rsync and finally load the image to your new server.

Can you copy docker image locally?

To export your image to a tar file, run the docker save command, specifying a name for the . tar file, and the docker image name. This will save the docker image locally.


1 Answers

If you want to export all images at once, create one big tar file:

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

If you want to save multiples images in one .tar file:

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

Finally, if you want to export multiple many images, with one .tar file per images (not disk efficient: common layer are saved in each .tar file):

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 

You may also want to save the list of images so that the restored images can be tagged:

docker images | sed '1d' | awk '{print $1 " " $2 " " $3}' > mydockersimages.list 

On the remote machine, you can load (import) the images:

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

and tag the imported images:

while read REPOSITORY TAG IMAGE_ID do         echo "== Tagging $REPOSITORY $TAG $IMAGE_ID =="         docker tag "$IMAGE_ID" "$REPOSITORY:$TAG" done < mydockersimages.list 

For more information about save/load, read: How to copy Docker images from one host to another without using a repository

like image 84
Franklin Piat Avatar answered Sep 19 '22 13:09

Franklin Piat