Copying docker image from one server to another server is an easy task. The following steps will explain you about this. Before getting into the actual steps, lets get the understanding of few terminologies.
What is a docker image ?
An image is an immutable master copy. We can correlate docker image with an ISO image of an operating system. Once we run this image, it will create a container. We can run any number of containers from the same image.
What is a docker container ?
Container is basically a running copy of the image with life. Alterations can be made on the container. Basically changes can be applied on top of the base image while running it as a container. A container can be called as a booted image.
Docker save, export and load commands
docker save will save a docker image to the disk. This saved file includes all the layers of images and the metadata required to chain these layers to rebuild the current image. So the docker save command will preserve the history of all the layers present in the current image. We can copy this saved file to another server to load the image and run containers.
The syntax is
docker save -o [filename] [imagename]:[version]
The above command will save the image into the given file name. You can also provide the complete path along with the file name.
The docker load command will load the image back from file into the system. To load this image from the file, use the following command.
docker load -i [saved image file name]
Docker export will create a snapshot of the container. Basically it will save the current state of the container as an image. It will not preserve the details of the layers present in the parent image of the container. This will save the container’s file system as a tar file. This command does not export the contents of volumes associated with the container.
Docker save needs to be performed on a docker image and docker export is performed on a docker container.
To copy a docker image from one host to another host in a single shot, the following command will help. For executing this command, the bzip2 package needs to be installed in your unix operating system
docker save [image]:[version] | bzip2 | ssh username@hostname 'bunzip2 | docker load'
Note: For installing bzip2 in centos/rhel, use the following command
yum install bzip2
apt-get install bzip2
I hope this article helped you. 🙂