Dockerでの保存とエクスポートの違いは何ですか?


157

私はDockerで数日間遊んでいて、すでにいくつかのイメージを作成しました(本当に楽しかったです!)。今、私は自分の仕事を続けたいと思ってsaveexportコマンドに来ましたが、私はそれらを完全に理解していません。

違いは何であるsaveexportドッカーでは?


回答:


169

短い答えは:

  • saveイメージをフェッチします:VMまたは物理サーバーの場合、インストール.ISOイメージまたはディスクになります。基本オペレーティングシステム。

    イメージの構築に必要なすべてのチェーンのレイヤーとメタデータをパックします。次に、この「保存された」イメージチェーンを別のDockerインスタンスに読み込み、これらのイメージからコンテナを作成できます。

  • export通常のVMのスナップショットのように、コンテナ全体をフェッチします。もちろんOSを保存しますが、加えた変更、コンテナの寿命中に書き込まれたデータファイルも保存します。これは、従来のバックアップに似ています。

    コンテナのファイルシステムを含むフラットな.tarアーカイブを提供します。

編集:私の説明は依然として混乱を招く可能性があるため、これらのコマンドの1つはコンテナーで機能し、他のコマンドは画像で機能することを理解することが重要だと思います。

  • 画像は、単一のバイトを変更しないであろうことから、0または1000のコンテナを開始し、「死んだ」または不変として考慮しなければなりません。そのため、以前にシステムインストールISOと比較しました。ライブCDに近いかもしれません。

  • コンテナ「ブーツ」の画像とその上に追加の層を追加します。このレイヤーは、コンテナの変更(作成/変更/削除されたファイル...)を格納します。


2
私の説明のためだけに:いくつかの変更を加えた実行中のコンテナーがあるとしましょう(たとえば、新しいフォルダーを作成しました)。これで、このコンテナのイメージを(でdocker commit)作成できます。その後save、画像を表示できます。または私はexport直接コンテナをすることができます。そして、両方の方法(save画像とexportコンテナ)は同じ結果になりますか?
Thomas Uhrig 2014年

2
はいといいえ。これによりexport、コンテナファイルシステムを含むフラットな.tarアーカイブが作成されます。save画像の構築に必要なすべてのチェーンのレイヤーとメタデータをパックします。次に、この " saved"イメージチェーンを別のDockerインスタンスに読み込み、これらのイメージからコンテナーを作成できます。
mbarthelemy 2014年

7
@ThomasUhrigエクスポートを使用して、コンテナを1つのレイヤー/ベースイメージに「フラット化」できます。また、コンテナー(feデータコンテナー)のバックアップにも使用できます。しかし、これはexport機能なしでも行うことができます。
Jiri

9
また、exportすべてのメタデータが失われるため、そのイメージを使用してコンテナーを実行しようとする場合は、CMDと他のmetdataを思い出してください。 save私にとってはうまくいきましたが、エクスポートは苦痛でした
ミラージュ

1
イメージを最新バージョンに更新したい。現在実行中のコンテナーは、内部ファイルシステムにいくつかの変更を加えました。アップグレード後、これらの変更を復元してください。私が理解しているように、保存/ロードとエクスポート/インポートの両方で新しいイメージが作成されますが、これは私が望むものではありません。dockerhubから新しいバージョンのイメージを使用したいのですが、既存のコンテナーからデータを復元します。最善の行動方針は何ですか?
Dmitry z

20

コマンドsaveexportコマンドの間には、主に2つの違いがあります。

  1. saveコマンドは、画像全体を履歴とメタデータとともに保存しexportますが、コマンドはファイル構造のみをエクスポートします(履歴とメタデータなし)。したがって、エクスポートされたtarファイルは保存されたtarファイルよりも小さくなります。

  2. あなたが新しいイメージを作成するためのエクスポートされたファイルシステムを使用する場合、この新しいイメージはいずれも含まないであろうUSEREXPOSERUNあなたのDockerfile等からのコマンド。ファイル構造のみが転送されます。したがって、Dockerfileで上記のキーワードを使用している場合、exportコマンドを使用してイメージを別のマシンに転送することはできません。常にsaveコマンドを使用する必要があります。


4

エクスポートされた画像にはレイヤーや履歴情報が保存されないため、サイズが小さくなり、ロールバックできなくなります。

保存された画像は、レイヤーと履歴情報が含まれているため、さらに大きくなります。

これを顧客に提供する場合、Qはそれらのレイヤーを保持しますか?


だから、エクスポートは何も書かれていないtxtファイルに似ていますか?@neil
AATHITHあるRajendran

4
これは、取り消しバッファーのないテキストファイルのようなものです8)
Neil McGill

2

技術的には、保存/読み込みは、レイヤーとも呼ばれる1つまたは複数の画像であるリポジトリで機能します。画像はリポジトリ内の単一のレイヤーです。最後に、コンテナはインスタンス化されたイメージです(実行中かどうかに関係なく)。


1

Docker save イメージから提供された各引数に対して、すべての親レイヤー、すべてのタグ+バージョン、または指定されたrepo:tagを含むtarファイルリポジトリを作成します。

Docker export Containerからの指定されたボリュームのコンテンツなしでフラットなコンテンツを含む指定されたファイル(tarまたはtgzの可能性があります)を生成します。

docker saveはdocker imageで使用する必要がありますが、docker exportはコンテナーで使用する必要があります(実行中のイメージと同様)

使用量を保存

Docker保存[オプション]画像[画像...]

画像をtarアーカイブに保存します(デフォルトでSTDOUTにストリーミングされます)

--help = false使用法を出力-o、--output = "" STDOUTの代わりにファイルに書き込む

輸出使用

docker export [OPTIONS] CONTAINER

コンテナーのファイルシステムの内容をtarアーカイブとしてエクスポートする

--help = false使用法を出力-o、--output = "" STDOUTの代わりにファイルに書き込む


1
質問は、一般的な定義と使用法ではなく、2つのコマンドの違いについてです!
アブシュモン2016年

0

exportcontainer (filesystem)-> image tar
importexported image tar-> image。1つのレイヤーのみ。

saveimage-> image tar
loadsaved image tar-> image。すべてのレイヤーが復元されます。

以下からのアクション、Second Editionの中ドッカー P190。

レイヤー化されたイメージは、イメージの履歴、コンテナー作成メタデータ、および削除またはオーバーライドされた可能性のある古いファイルを維持します。

フラット化されたイメージには、ファイルシステム上の現在のファイルセットのみが含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.