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 はイメージのレイヤー・タグ・設定を保ったまま移せる。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲