画像を区別すると便利です およびコンテナ (ドキュメント)。 画像 静的であり、ディスク上にのみ存在します。 コンテナ 画像の実行中のインスタンスです また、独自のプロセス ツリーだけでなく、RAM やその他のランタイム リソースも含まれています。
画像 レイヤの論理グループと、コンテナを作成するときに何をすべきか、およびレイヤを組み立てる方法に関するメタデータです。そのメタデータの一部は、各レイヤーがその親の ID を認識していることです。
では、レイヤーには何が入りますか?親に追加したファイル (およびディレクトリ)。親から何かが削除されたことを示す特別なファイル (「ホワイトアウト」) もあります。
docker run
の場合 画像、docker
コンテナを作成します。すべてのレイヤーを正しい順序で解凍し、ホストとは別の新しい「ルート」ファイル システムを作成します。 docker
また、イメージのメタデータを読み取り、イメージの作成時に指定された「エントリポイント」または「コマンド」を開始します。これにより、新しいプロセス サブツリーが開始されます。コンテナー内からは最初のプロセスがツリーのルートのように見えますが、ホストからはプロセスのサブツリーであることがわかります。
ルート ファイル システムは、ある Linux ディストリビューションを別のディストリビューションと区別するものです (カーネル モジュールの違いや、ブートローダー/ブート ファイル システムの違いもある可能性がありますが、これらは通常、実行中のプロセスからは見えません)。カーネルはホストと共有されており、実際にはコンテナー内で通常の役割を果たしています。ただし、ルート ファイル システムは異なるため、コンテナー内にいるときは、Docker イメージに含まれていたディストリビューションと同じように見えます。
コンテナーには、独自のファイル システムとプロセス ツリーがあるだけでなく、独自の論理ネットワーク インターフェイスと、オプションで RAM と CPU 時間の独自の割り当てがあります。ただし、オペレーターとしてコンテナーを制御しているため、ホストのネットワーク インターフェイスをコンテナーと共有し、RAM と CPU への無制限のアクセスを許可し、デバイス、ファイル、およびディレクトリをホストからコンテナーにマウントすることもできます。容器。デフォルトでは、物事を分離しておくことですが、必要なだけ分離モデルを破る力があります.
Docker は LXC Linux コンテナーのラッパーであり、そのドキュメントでは、何が共有され、何が共有されていないかを詳しく知ることができます。
一般に、ホスト マシンは、ファイル システムからプロセスなど、コンテナー内のすべてのものを認識/格納します。ホスト vm で ps コマンドを発行し、コンテナー内のプロセスを表示できます。
Docker コンテナーは VM ではないことに注意してください。したがって、実際にはすべてがホスト上でネイティブに実行され、ホスト カーネルを直接使用しています。各コンテナには独自のユーザー名前空間があります (古いルート刑務所に似ています)。コンテナが自身のプロセスのみを認識できるようにするツール/機能があり、ホスト ファイル システム上にレイヤー化された独自のファイル システムと、ホスト ネットワーク スタックにパイプするネットワーク スタックがあります。