Prefer Docker save and load

Prefer Docker save and load

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.