Docker は、アプリケーションを作成、デプロイ、実行するための非常に人気のあるオープン ソース ツールです。仮想マシンと比較して、Docker はより軽量な仮想化を提供し、Docker をサポートする任意のシステム上でアプリケーションを迅速にデプロイして実行できるようにします。
Docker では、イメージは、アプリケーションの実行に必要なすべての依存関係と構成を含む実行可能な Docker コンテナーです。 Dockerコンテナは既存のイメージをベースに構築することができ、この構築方法を階層化構築と呼びます。各層は特定の構成または依存関係を表します。
Dockerコンテナの動作原理はデータ構造におけるツリー構造に似ており、各イメージがノードとなり、レイヤー間には親子関係が形成されます。そこで疑問なのですが、親画像を削除すると子画像は使用できなくなるのでしょうか?
答えは「はい」です。子ミラーは親イメージの特定の構成または依存関係に依存するため、親イメージが削除されると、子ミラーは正しく動作しなくなります。
Docker コンテナーの各レイヤーのファイル システムは読み取り専用であるため、イメージが Docker で実行されると、コンテナーがコンテナー内のファイル システムを変更できるようにする読み取り/書き込みレイヤーが作成されます。コンテナー内で変更が行われると、Docker は共同ファイル システムを使用して読み取り/書き込みレイヤーとイメージ レイヤーをマージするため、変更されたファイルは元のイメージ レイヤーに影響を与えることなく読み取り/書き込みレイヤーで更新されます。
コンテナを停止して削除すると、その読み取り/書き込みレイヤーも削除されますが、ミラーレイヤーは削除されません。したがって、ある画像が別の画像の親画像として機能する場合、その画像レイヤーが常に存在する必要があります。存在しないと、子画像は使用できなくなります。
それでは、ミラーを削除したいが、そのサブミラーの使用には影響を与えたくない場合はどうすればよいでしょうか?ここには 2 つの解決策があります。
イメージが他のイメージに依存して構築されている場合は、Dockerfile の依存関係と構成を変更できます。親イメージが削除できない問題を解決するには、ファイル内の設定を変更してください。 Dockerfile で COPY または ADD 命令を使用すると、必要なファイルまたはディレクトリを他のイメージから取得するのではなく、イメージにコピーできます。この方法では、他のイメージ ビルドに依存する必要がなく、親イメージを削除しても影響を受けません。
ミラーが他のミラーの親ミラーとして使用されているが、その子の使用には影響を与えたくない場合ミラーがある場合は、ミラーのエクスポートとインポートを使用して問題を解決できます。まず、イメージをエクスポートする必要があります:
docker save <image-name>:<tag> > /path/to/save/image.tar
次に、dockerload コマンドを使用してイメージを他のシステムにインポートし、イメージを引き続き使用できるようにします。
docker load < /path/to/save/image.tar
このようにして、必要なときに使用できるように画像をアーカイブできます。
概要:
Docker では、イメージの依存関係が非常に重要であり、子イメージを使用するには親イメージの存在が不可欠です。親イメージを削除する場合は、他のイメージへの影響を考慮する必要があります。 Docker イメージを構築するときは、COPY または ADD 命令を使用して必要なファイルまたはディレクトリをイメージにコピーし、親イメージへの依存を避けることができます。イメージを移行する必要がある場合、イメージのエクスポートおよびインポート方法を使用して、他のシステムでの使用を容易にすることができます。
以上がDocker親イメージが削除できない場合の対処法(2つの方法)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。