次の図に示すように: 仮想マシンと Docker を使用するとき、「なぜ Docker は VM よりも高速なのか?」という疑問が生じます。 上の図はこの問題を客観的に示しています。 1. Docker には仮想マシンよりも抽象化レイヤーが少なくなっています。 2. Docker はホストマシンのカーネルを使用しますが、VM にはゲスト OS が必要です。 したがって、新しいコンテナを作成するときに、Docker は仮想マシンのようにオペレーティング システムを再ロードする必要がありません。仮想マシンはゲスト OS をロードします (数分かかる)。一方、Docker はホスト マシンのオペレーティング システムを使用するため、この複雑なプロセスは省略されます (数秒かかる)。 これらを明確にした後、クライアント側でどのように使用するかを見てみましょう。 まず、いくつかの用語を理解する必要があります。 ホスト (Docker エンジン)Docker デーモンとコンテナを実行するために使用される物理マシンまたは仮想マシン。 画像Docker イメージとは何ですか?簡単に言えば、Docker イメージは Linux カーネル上で実行できるプログラムと対応するデータを含む Linux ファイル システム (ルート ファイル システム) です。
容器イメージとコンテナの関係は、オブジェクト指向プログラミングにおけるクラスとインスタンスの関係に似ています。イメージは静的な定義であり、コンテナはイメージの実行時のエンティティです。コンテナは作成、開始、停止、削除、一時停止などが可能です。 画像のレイヤー化Docker は、既存のイメージを拡張して新しいイメージを作成することをサポートしています。実際、Docker Hub のイメージの 99% は、ベース イメージに必要なソフトウェアをインストールして構成することによって構築されます。 上の図からわかるように、ベースイメージをレイヤーごとに積み重ねることで新しいイメージが生成されます。ソフトウェアをインストールするたびに、既存のイメージにレイヤーが追加されます。 書き込み可能なコンテナレイヤーコンテナが起動すると、イメージの上に新しい書き込み可能なレイヤーが読み込まれます。このレイヤーは通常「コンテナ レイヤー」と呼ばれ、「コンテナ レイヤー」の下にあるものはすべて「イメージ レイヤー」と呼ばれます。 コンテナへのすべての変更 (ファイルの追加、削除、変更など) は、コンテナ レベルでのみ行われます。コンテナ レイヤーのみが書き込み可能で、コンテナ レイヤーの下にあるすべてのイメージ レイヤーは読み取り専用です。 イメージ レイヤーの数は膨大になる可能性があり、すべてのイメージ レイヤーが結合されて統合されたファイル システムが形成されます。 /a のように、異なるレイヤーに同じパスを持つファイルがある場合、上位レイヤーの /a が下位レイヤーの /a を上書きするため、ユーザーは上位レイヤーのファイル /a にのみアクセスできます。コンテナ層では、ユーザーが目にするのは重ね合わせたファイルシステムです。 データは変更が必要な場合にのみコピーされます。この機能は、Copy-on-Write と呼ばれます。コンテナ レイヤーは画像の変更された部分を保存し、画像自体には変更を加えないことがわかります。 要約すると、コンテナ レイヤーはイメージへの変更を記録し、すべてのイメージ レイヤーは読み取り専用であり、コンテナによって変更されないため、イメージは複数のコンテナで共有できます。 音量実際、コンテナはオペレーティング システムの簡易版のようなものです。ただし、システムはプログラムの実行に必要な環境のみをインストールします。前述のように、コンテナは削除できます。コンテナを削除した場合、コンテナ内のプログラムによって生成された、保持する必要があるデータはどうすればよいでしょうか。コンテナが実行中の場合、コンテナに入って表示することができます。コンテナが削除されると、何も残りません。 そこで、データ ボリュームがこの問題を解決するために使用されます。これは、ホスト マシン上のデータを永続化し、コンテナー間のデータ共有を実現するために使用されます。簡単に言うと、ホスト マシンのディレクトリをコンテナー内のディレクトリにマップします。アプリケーションはコンテナー内のディレクトリでデータを読み書きし、そのデータはホスト マシンに同期されます。このようにして、コンテナーによって生成されたデータを永続化できます。たとえば、データベース コンテナーは、ホスト マシン上の実際のディスクにデータを保存できます。 レジストリDocker はレジストリを使用してユーザーが構築したイメージを保存します。レジストリには、パブリックとプライベートの 2 種類があります。 Docker Inc. は Docker Hub と呼ばれるパブリックレジストリを運営しています。ユーザーは Docker Hub にアカウントを登録して、独自のイメージを共有および保存できます。 Docker は、使用できる膨大なイメージのコレクションを提供するパブリック イメージ リポジトリ hub.docker.com (Docker では Repository と呼びます) を提供します。 Docker レジストリには複数のリポジトリを含めることができ、各リポジトリには複数のタグを含めることができ、各タグはイメージに対応します。 通常、リポジトリには同じソフトウェアの異なるバージョンのイメージが含まれており、タグはソフトウェアの異なるバージョンに対応しています。 <ウェアハウス名>:<ラベル> の形式を使用して、どのバージョンのソフトウェアがミラーであるかを指定できます。タグが指定されていない場合、デフォルトのタグは最新になります。 要約するDocker の公式 Web サイトには、次のような文章があります。「あらゆるアプリケーションをどこでもビルドして出荷できます。」今理解したことと組み合わせると、要約すると、「一度ビルドすれば、どこでも実行できます。」となります。 上記のテクノロジーを組み合わせることで、最終結果は次のようになります。ほとんどのアプリケーションでは、開発者は docker build を通じてイメージを作成し、docker push を通じてイメージをアップロードし、ユーザーは docker pull を通じてイメージをダウンロードし、docker run でコンテナ アプリケーションを実行できます。ユーザーは、環境の構築方法、インストール方法、異なるディストリビューション間のライブラリ競合の解決方法について心配する必要がなくなり、通常、ハードウェア リソースの消費量が増えたり、パフォーマンスが大幅に低下したりすることもありません。 以上がDockerの動作モードと原理の詳細な説明の詳細な内容です。Dockerの動作モードと原理の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: MySQLコマンドが中国語で入力できない問題の解決方法
>>: 入力できない無効な値はアクションレイヤーに渡すことができません
1. 分割スクリプト (splitNginxLog.sh) を作成します。 * この例では、ログ分割...
この記事では、カスタムツリーコンポーネントを再帰的に実装するVueの具体的なコードを参考までに共有し...
テーブルを美しくするために、行ごとに異なる境界線の色を設定できます。基本的な構文<TR 境界線...
仕事を探しています!!!事前準備:まず、このアニメーションは、以前のローディングアニメーションとクー...
auto.js を使用して毎日のチェックインを自動化する感染症のせいで、毎日時間通りに家に帰らなけれ...
多くのウェブサイトを閲覧すると、ブラウザのアドレスバーの前に小さなアイコンがあり、ブラウザのタブの位...
Linux システムでは、環境変数は適用範囲に応じて、システムレベルの環境変数とユーザーレベルの環境...
JavaScriptの日付エフェクトの具体的なコードは参考用です。具体的な内容は次のとおりです。コー...
背景:場合によっては、json データをページに直接表示する必要があります (たとえば、インターフェ...
目次1. JavaScriptを使用してQRコードを解析する1. QR コードとは何ですか? 2.q...
問題の説明私たちのプロジェクトでは、水平方向のテーブルが一般的ですが、必要に応じて垂直方向のテーブル...
Tencent Cloud上に構築されたMySQLは、開発用コンピュータでNavicatを使用して...
1. Spring Boot は jsp jar パッケージをサポートしていません。jsp は wa...
序文日常の開発では、テキストの水平スクロール効果(一般にカルーセルと呼ばれる)によく遭遇します。これ...
Linux がすべてのコマンドをサポートしていない場合はどうすればいいですか?すべてのLinuxコマ...