Dockerの保存とエクスポートの違い
1. 序章
Dockerエコシステムには、混乱を招く可能性のある多くのツールと機能があります。 この短い記事では、Docker saveコマンドとexportコマンドの違いを見ていきます。
2. Dockerイメージと 容器
これら2つのコマンドの違いを理解するには、まずDockerイメージとコンテナーの違いを理解する必要があります。
Dockerイメージは、アプリケーションの実行に必要なすべてのファイルを含むファイルです。 これには、すべてのオペレーティングシステムファイル、アプリケーションコード、および必要なサポートライブラリが含まれます。
Dockerコンテナーは、開始されたDockerイメージです。 コンテナは基本的に実行中のアプリケーションです。 コンテナは、通常のプロセスと同様にメモリとCPUリソースを消費し、ファイルシステムにアクセスしたり、ネットワークプロトコルを介して他のコンテナと通信したりすることもできます。
Dockerコンテナーとイメージは、Javaクラスとオブジェクトに類似しています。 Dockerイメージがコンテナーを作成するための青写真であるのと同じように、Javaクラスはオブジェクトを作成するための青写真です。 また、1つのクラスを複数のオブジェクトにインスタンス化できるのと同じように、Dockerイメージを使用して複数のコンテナーを起動できます。
これを念頭に置いて、Docker saveコマンドとexportコマンドの違いを詳しく見ていきます。
3. docker保存
Docker saveコマンドは、Dockerイメージをtarファイルに保存するために使用されます。 このコマンドは、Dockerイメージをあるレジストリから別のレジストリに移動したり、Linuxtarコマンドを使用してイメージの内容を調べたりする場合に役立ちます。
デフォルトでは、コマンドはtarファイルの内容をSTDOUTに出力するため、一般的な使用法は次のとおりです。
docker save IMAGE > /path/to/file.tar
リダイレクトが不要になるように、コンテンツを印刷するファイルを指定することもできることに注意してください。
docker save -o /path/to/file.tar IMAGE
IMAGE パラメーターは、いずれの場合も、次の2つの値のいずれかになります。
- 完全修飾画像名(例:「ghcr.io/baeldung/my-application:1.2.3」)
- Dockerによって生成された画像ハッシュ(例:「c85146bafb83」)
4. ドッカーエクスポート
Docker exportコマンドは、Dockerコンテナをtarファイルに保存するために使用されます。 これには、イメージファイルと、コンテナの実行中に行われた変更の両方が含まれます。
構文は、saveコマンドとまったく同じです。 save と同様に、 export コマンドは出力をSTDOUTに送信するため、ファイルにリダイレクトする必要があります。
docker export CONTAINER > /path/to/file.tar
または、出力ファイル名を指定できます。
docker export -o /path/to/file.tar CONTAINER
どちらの場合も、CONTAINERパラメーターは次のいずれかの値になります。
- 自動生成された、またはコンテナーの開始時に指定されたコンテナー名
- Dockerエンジンによって割り当てられた一意のコンテナーハッシュ
5. 違い
コマンドは本質的に似ていますが、注意すべきいくつかの違いがあります。 どちらのコマンドもtarファイルを生成しますが、含まれる情報は異なります。
saveコマンドは、すべての履歴とメタデータを含む画像レイヤー情報を保持します。 これにより、tarファイルを任意のDockerレジストリに完全にインポートし、それを使用して新しいコンテナを起動できます。
逆に、exportコマンドはこの情報を保持しません。 コンテナを開始したイメージと同じファイルが含まれていますが、履歴とメタデータは含まれていません。
さらに、 export コマンドには、新しいファイルや変更されたファイルなど、コンテナーの実行中に行われた変更が含まれます。 これは、同じイメージの異なるコンテナがそれらをエクスポートするときに異なるtarファイルを生成する可能性があることを意味します。
6. 結論
このチュートリアルでは、Docker saveコマンドとexportコマンドの違いを確認しました。 どちらも構文は似ており、tarファイルを作成しますが、2つの異なる目的を果たします。 save コマンドはイメージに使用され、exportコマンドはコンテナーに使用されます。