Dockerでイメージやコンテナをファイルにエクスポートして、またインポートする方法を紹介します。
Dockerには、コンテナを保存する exportコマンドと、イメージを保存する saveコマンドの2つがあります。
saveと exportは、それぞれイメージとコンテナを圧縮ファイル(.tar)にまとめます。
イメージを保存する:save
1 |
docker save [オプション] イメージ名 |
Dockerのイメージに付随するメタ情報などを含めたイメージを保存します。sample-imageというイメージを保存する場合は、以下のようになります。
1 |
docker save sample-image > sample-image.tar |
コンテナでの変更をイメージに反映する場合は、 commitをしてから保存します。
保存したイメージを読み込む
saveコマンドで保存したイメージは、 loadコマンドでDockerに取り込むことができます。
1 |
docker load < sample-image.tar |
コンテナを保存する:export
1 |
docker export [オプション] コンテナ名|コンテナID |
Dockerのコンテナを保存します。Dockerのメタ情報などは無視され、ファイルシステムのコピーがそのまま保存されます。
1 |
docker export sample-container > sample-container.tar |
保存したコンテナを読み込む
1 |
docker import ファイル - [レポジトリ[:タグ]] |
exportしたコンテナは、 importを使ってDockerにイメージとして取り込むことができます。オプションでレポジトリ名とタグを指定することができます。
example-container.tarをnew-imageというレポジトリ名でlatestタグをつけて取り込む。
1 |
cat example-container.tar | docker import - new-image:latest |
saveとexportどちらを使うべきか
saveはイメージを保存、 exportはコンテナを保存という違いがあります。その上で、両者の違いとして大きいのはメタ情報を保存するかどうかという点にあります。
Dockerのイメージは、ファイル差分がレイヤが重なるような構成となっており、 saveはレイヤの情報なども含めた状態で保存されます。一方で、 exportはDockerとしての構造やメタ情報は保存されず、ファイルシステムだけが保存されます。
そのためファイルサイズは、 saveよりも exportのほうが小さくなります。