目次

docker save コマンド入門:イメージの保存と読み込み(save、load、export、import)

docker save と docker load はイメージの移動に使います。docker export と docker import はコンテナのファイルシステムを扱い、イメージの設定が異なる場合があります。イメージの基本概念についてはDocker イメージを参照してください。

構文

docker save [OPTIONS] IMAGE [IMAGE...]
docker load [OPTIONS]
docker export [OPTIONS] CONTAINER
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

オプション

コマンドオプション説明
save-o, --output string指定したファイルに書き込みます。指定しない場合は STDOUT に出力します
save--platform strings指定したプラットフォームのみを保存します。カンマ区切りで指定できます。例:linux/amd64,linux/arm64/v8
load-i, --input string指定した tar アーカイブから読み込みます。指定しない場合は STDIN から読み込みます
load--platform strings指定したプラットフォームのみを読み込みます
load-q, --quiet読み込み結果を表示しません
export-o, --output stringコンテナのファイルシステムを指定したファイルに書き込みます
import-c, --change list作成するイメージに Dockerfile の命令を適用します
import-m, --message stringインポートするイメージのコミットメッセージを設定します
import--platform stringサーバーがマルチプラットフォームに対応している場合、プラットフォームを設定します

例

イメージの保存、gzip 圧縮、読み込み

$ docker save -o nginx.tar nginx:1.30-alpine

$ ls -lh nginx.tar
-rw-------    1 root     root       25.7M Oct 25 15:31 nginx.tar

$ docker save nginx:1.30-alpine | gzip > nginx.tar.gz && ls -lh nginx.tar.gz
-rw-r--r--    1 root     root       24.9M Oct 25 15:31 nginx.tar.gz

$ docker load -i nginx.tar.gz
Loaded image: nginx:1.30-alpine

$ docker images nginx
IMAGE               ID             DISK USAGE   CONTENT SIZE   EXTRA
nginx:1.30-alpine   47928bf67eb6       93.5MB           27MB   U
  • docker save -o はイメージを tar アーカイブに書き込みます。この例では、25.7MB のファイルにイメージデータが含まれます。
  • このイメージを gzip 圧縮すると 24.9MB になり、元の tar より 0.8MB 小さくなるだけです。圧縮効果は限られています。
  • docker load -i は gzip 圧縮されたアーカイブを直接読み込み、nginx:1.30-alpine をロードできます。
  • 読み込み後に docker images を実行するとイメージを確認できます。DISK USAGE は 93.5MB と表示されますが、アーカイブのサイズとは異なる値です。

export/import でファイルシステムを取り込む

$ docker export web -o web-fs.tar && ls -lh web-fs.tar
-rw-------    1 root     root       60.5M Oct 25 15:31 web-fs.tar

$ docker import web-fs.tar myweb:snapshot
sha256:56e3f92534ca8c5aedd8de576ae2433f1864d3d3b51de847a8dc8dd7d503da4d

$ docker run --rm myweb:snapshot cat /usr/share/nginx/html/hi.txt
hello

$ docker image inspect -f '{{.Config.Cmd}}' nginx:1.30-alpine
[nginx -g daemon off;]

$ docker image inspect -f '{{.Config.Cmd}}' myweb:snapshot
[]

$ docker run --rm myweb:snapshot
docker: Error response from daemon: no command specified

Run 'docker run --help' for more information
  • docker export は web コンテナのファイルシステムを tar に書き出し、docker import はそこから myweb:snapshot イメージを作成します。
  • インポートしたイメージにもファイルは含まれています。cat /usr/share/nginx/html/hi.txt を指定すると hello を読み取れます。
  • nginx:1.30-alpine の .Config.Cmd には nginx -g daemon off; が設定されていますが、myweb:snapshot の .Config.Cmd は空の配列 [] です。
  • インポートしたイメージにはデフォルトのコマンドがないため、そのまま docker run を実行すると no command specified と表示されます。実行時にコマンドを明示してください。

関連する章

練習問題

練習:nginx:1.30-alpine を gzip 圧縮アーカイブとして保存し、そのファイルからイメージを読み込んでください。

解答
docker save nginx:1.30-alpine | gzip > nginx.tar.gz
docker load -i nginx.tar.gz

よくある質問

docker save と docker export の違いは何ですか?

docker save はイメージをアーカイブし、後で docker load でイメージとして読み込めます。docker export はコンテナのファイルシステムをエクスポートし、docker import と組み合わせて新しいイメージを作成します。

docker save の結果を gzip 圧縮すると、どれくらい容量を節約できますか?

今回の nginx:1.30-alpine の tar ファイルは 25.7MB、gzip 圧縮後は 24.9MB で、差はわずかです。

docker import の後にそのまま docker run を実行すると、なぜ no command specified と表示されますか?

インポートした myweb:snapshot の .Config.Cmd は空の配列 [] で、デフォルトのコマンドがありません。cat /usr/share/nginx/html/hi.txt を指定すればファイルを読み取れますが、コマンドを指定せずに実行すると no command specified と表示されます。

更新日 2026年10月26日