Prefer Docker save and load
Table of contents
over Docker export and import.
This serves as a reminder for me as I often mixed up myself.
Save vs Export
As per documentation, save produces a tar file that contains
all parent layers, and all tags + versions, or specified repo:tag, for each argument provided
docker save busybox:latest > busybox.tar
while export also produces a tar file, it only exports the content without layer/history
export the contents of the underlying directory
docker export busybox:latest > busybox.tar
What this also means is that using the export
will result in a smaller size image due to flattening.
Load vs Import
load restores the full history and layers from what was saved
Load an image or repository from a tar archive (even if compressed with gzip, bzip2, or xz) from a file or STDIN. It restores both images and tags.
docker load < busybox.tar
while import just creates the filesystem with the exported content
Import the contents from a tarball to create a filesystem image
docker import busybox.tar
When to use one over another?
In most cases, it wouldn't matter much.
However, from the perspective of running the command on an internet-enabled machine vs an air-gapped machine, there is a slight difference and you should really prefer to use save and load
combination.
Why? Because on an air-gapped machine, you might the full history/layers to load successfully, otherwise, you may encounter errors where there are missing layers/images. From my very very vague memory, the digest seems to be the same whether you run load or import
.
References:
Subscribe to my newsletter
Read articles from Joseph Gan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Joseph Gan
Joseph Gan
Advocate for better developer's productivity and experience Documenting my learnings and sharing it