2026年5月19日
2026年5月19日
docker saveとdocker loadでイメージをtarファイルに保存・読み込む方法
docker save は Docker イメージを1つの tar ファイルに書き出すコマンドで、docker load はその tar ファイルからイメージを読み込むコマンドです。レジストリ(Docker Hub など)を使わずにイメージを別のマシンへ移したいとき、インターネットに接続できないサーバーにイメージを持ち込みたいとき、特定の版のイメージを手元に残しておきたいときに使います。
この記事では、基本の使い方と、タグ・圧縮・複数イメージの扱い、似たコマンドの docker export との違いを説明します。オプションと動作は、2026年11月時点で Docker の公式リファレンスを確認した内容です。
基本:保存して読み込む
docker save でtarファイルに書き出す
# イメージ名:タグ を指定して保存する
docker save -o nginx_1.27.tar nginx:1.27
# -o を付けない場合は標準出力に出るので、リダイレクトで保存する
docker save nginx:1.27 > nginx_1.27.tar
-o(--output)は書き出すファイル名の指定です。保存するイメージがローカルに無い場合はエラーになるので、先に docker pull や docker build でイメージを用意しておきます。
docker load で読み込む
docker load -i nginx_1.27.tar
# Loaded image: nginx:1.27
# 標準入力から読み込むこともできる
docker load < nginx_1.27.tar
-i(--input)は読み込むファイルの指定です。読み込みが終わると、Loaded image: の後にイメージ名とタグが表示されます。docker images で一覧に出ていることを確かめてください。
タグを残すには「名前:タグ」で指定する
保存するときにイメージID(docker images の IMAGE ID 列の値)で指定すると、tar ファイルにイメージ名とタグの情報が入らず、読み込んだ側では名前もタグも無い(<none> と表示される)イメージになります。その場合は読み込んだ後に docker tag で名前を付けます。
# イメージIDで保存したものを読み込んだ場合
docker load -i image.tar
# Loaded image ID: sha256:...
# 名前とタグを付け直す(表示されたIDの先頭数文字を指定できる)
docker tag 3b25b682ea82 myapp:1.0
最初から myapp:1.0 のように「名前:タグ」で保存しておけば、この手間はかかりません。
複数のイメージをまとめて保存する
docker save には複数のイメージを並べて指定でき、1つの tar ファイルにまとめて保存されます。共通のレイヤーは1回分だけ保存されるので、別々に保存するよりファイルが小さくなることがあります。
# 複数のイメージを1つのファイルに
docker save -o webapp_images.tar myapp:1.0 nginx:1.27 mariadb:11.4
# 読み込みは1回で、含まれるイメージがすべて登録される
docker load -i webapp_images.tar
タグを付けずにリポジトリ名だけを指定すると(例: docker save -o all_nginx.tar nginx)、ローカルにあるそのリポジトリのタグがすべて保存されます。意図しないタグまで入ってファイルが大きくなることがあるので、必要なタグを明示するほうが管理しやすくなります。
Docker Compose で使っているイメージをまとめて保存したいときは、docker compose config --images で使われているイメージ名を一覧にできます。
docker save -o compose_images.tar $(docker compose config --images)
圧縮して保存する
docker save が出力する tar ファイルは圧縮されていません。転送やバックアップの容量を減らしたいときは、gzip などで圧縮します。
# gzip で圧縮しながら保存する
docker save myapp:1.0 | gzip > myapp_1.0.tar.gz
# 読み込みは圧縮されたままでよい
docker load -i myapp_1.0.tar.gz
docker load は gzip・bzip2・xz・zstd で圧縮されたファイルをそのまま読み込めるので、展開してから読み込む必要はありません。
特定のプラットフォームだけを保存・読み込む
複数のCPUアーキテクチャ向けのイメージ(マルチプラットフォームイメージ)を扱う環境では、--platform で対象を絞れます。このオプションは Docker Engine API 1.48 以降(Docker Engine 28 系以降)で使えます。
# linux/amd64 向けだけを保存する
docker save --platform linux/amd64 -o myapp_amd64.tar myapp:1.0
# 読み込むときに絞ることもできる
docker load --platform linux/amd64 -i myapp_multi.tar
指定したプラットフォームがローカルのイメージに無い場合は、no suitable export target found for platform のようなエラーになります。
別のサーバーへ移す手順の例
インターネットに接続できないサーバーにイメージを持ち込む場合の流れです。
# 1. インターネットに接続できるマシンで取得して保存する
docker pull nginx:1.27
docker save nginx:1.27 | gzip > nginx_1.27.tar.gz
sha256sum nginx_1.27.tar.gz > nginx_1.27.tar.gz.sha256
# 2. ファイルを移す(scp の例)
scp nginx_1.27.tar.gz nginx_1.27.tar.gz.sha256 user@server:/tmp/
# 3. 移した先で、ファイルが壊れていないか確かめてから読み込む
cd /tmp
sha256sum -c nginx_1.27.tar.gz.sha256
docker load -i nginx_1.27.tar.gz
docker images nginx
移す先のマシンのCPUアーキテクチャ(amd64・arm64 など)に合ったイメージを保存してください。docker image inspect --format '{{.Architecture}}' nginx:1.27 で、ローカルのイメージのアーキテクチャを確認できます。
docker export / import との違い
似たコマンドに docker export と docker import があります。対象と残る情報が違います。
| docker save / load | docker export / import | |
|---|---|---|
| 対象 | イメージ | コンテナ(のファイルシステム) |
| レイヤーと履歴 | 残る | 1つのファイルシステムにまとめられ、履歴は残らない |
| イメージ名・タグ | 残る(名前:タグで保存した場合) | 残らない(import 時に付ける) |
CMD・ENV などの設定 |
残る | 残らない(import 時に --change で指定する) |
| 主な用途 | イメージをそのまま別の環境へ移す | コンテナの中身をファイルとして取り出す |
実行中のコンテナに加えた変更を残したい場合は、docker commit でイメージにしてから docker save で保存する方法もあります。ただし、変更内容が Dockerfile に残らず再現しにくくなるため、可能なら Dockerfile を直してイメージを作り直すほうが管理しやすくなります。docker commit についてはdocker commitでコンテナからイメージを作る方法を参照してください。
保存したファイルの中身を確認する
tar ファイルの中身は、tar コマンドで一覧できます。
tar -tf nginx_1.27.tar | head
保存されるファイルには manifest.json や index.json、レイヤーのデータが含まれます。tar ファイルの内部の形式は Docker のバージョンによって違うことがあるため、中身を直接書き換えず、読み込みは docker load で行ってください。
注意点
- ファイルにイメージの中身がすべて入る: イメージの中に設定ファイルや秘密情報(APIキーなど)を含めている場合、tar ファイルからも取り出せます。保存したファイルの置き場所と共有先に注意してください。
- ボリュームのデータは含まれない:
docker saveが保存するのはイメージだけです。データベースのデータなど、ボリュームに保存しているデータは別にバックアップします。 - ディスクの空き容量: 保存時は tar ファイルの分、読み込み時はイメージの分の空き容量が必要です。大きなイメージでは事前に
df -hで確認します。
まとめ
docker save -o ファイル名.tar 名前:タグで保存し、docker load -i ファイル名.tarで読み込む。- イメージIDで保存すると名前とタグが残らないので、「名前:タグ」で指定する。
- 複数のイメージは並べて指定すれば1つのファイルにまとまる。
- 圧縮は
docker save 名前:タグ | gzip > ファイル名.tar.gz。docker loadは圧縮されたファイルをそのまま読み込める。 - コンテナの中身を取り出す
docker exportとは別のコマンドで、save / load はイメージのレイヤー・タグ・設定を保ったまま移せる。