Dockerでイメージをインポート・エクスポートする

Dockerでイメージやコンテナをファイルにエクスポートして、またインポートする方法を紹介します。

Dockerには、コンテナを保存するexportコマンドと、イメージを保存するsaveコマンドの2つがあります。

saveexportは、それぞれイメージとコンテナを圧縮ファイル(.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のほうが小さくなります。


イベント

2017/10/06(金)
UX School(全10回)