目次
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日