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