ホームページ  >  記事  >  運用・保守  >  docker は物理マシン上で実行されますか? それとも仮想マシン上で実行されますか?

docker は物理マシン上で実行されますか? それとも仮想マシン上で実行されますか?

WBOY
WBOYオリジナル
2022-06-27 11:12:046080ブラウズ

Docker は物理マシンでも仮想マシンでも実行でき、仮想マシンでも物理マシンでも、本質的にはレベルであるハードウェアとインフラストラクチャ、およびコンテナの配信方法です。主にソフトウェア中心の問題を解決するために使用され、仮想マシンと物理マシンの両方でコンテナを実行することが可能です。

docker は物理マシン上で実行されますか? それとも仮想マシン上で実行されますか?

このチュートリアルの動作環境: linux7.3 システム、docker バージョン 19.03、Dell G3 コンピューター。

Docker は物理マシンでも仮想マシンでも実行できます

Docker コンテナは仮想マシンでも物理マシンでも実行できます

は仮想マシンまたは物理マシンです マシンは両方ともハードウェア/インフラストラクチャの配信方法であり、本質的に同じレベルにあります。一方、コンテナは主にソフトウェア中心の一連の問題を解決します

厳密に言えば、コンテナと仮想マシンは階層的なものは、パッケージ化されたソフトウェア環境のコレクションです。

仮想マシンでコンテナを実行することは一般的になってきています。たとえば、AWS のコンテナ サービスは仮想マシンでのみ実行されます。

Docker デーモンは、メイン オペレーティング システムと直接通信して、各 Docker コンテナにリソースを割り当てることができます。また、コンテナをメイン オペレーティング システムから分離し、各コンテナを相互に分離することもできます。 Docker は、フロントエンド、バックエンド、データベースなどのさまざまなアプリケーションを分離するためによく使用されます。

拡張知識:

Docker デーモンは、メイン オペレーティング システムと直接通信して、各 Docker コンテナにリソースを割り当てることができます。また、メイン オペレーティング システムからコンテナを分離することもできます。システムを構築し、各コンテナを相互に分離します。 Docker は、フロントエンド、バックエンド、データベースなどのさまざまなアプリケーションを分離するためによく使用されます。

Docker には、コンパクトさ、迅速な移行と展開、効率的な運用という特徴がありますが、その分離性はサーバー仮想化よりも劣ります。異なるコンテナは異なる運送状 (Docker 上で実行される異なるアプリケーション インスタンス) に属し、それぞれから独立しています。その他(絶縁)。ただし、同じウェアハウス マネージャー (ホスト オペレーティング システム カーネル) によって管理されるため、ウェアハウス マネージャーはすべてのコンテナーの関連情報を確認できます (オペレーティング システム カーネルが共有されるため、関連情報も共有されます)。

仮想マシンは、オペレーティング環境全体を完全に分離することに優れています。たとえば、クラウド サービス プロバイダーは通常、仮想マシン テクノロジを使用してさまざまなユーザーを分離します。仮想マシンの起動には数分かかりますが、Docker コンテナは数ミリ秒で起動できます。オペレーティング システムが肥大化しなければ、Docker はディスク領域やその他のシステム リソースを大幅に節約できます。

サーバー仮想化は、複数の独立した「小さなドック」、つまりドック (物理ホストと仮想化層) 上の倉庫 (仮想マシン) を確立するようなものです。これは完全に独立した (分離された) スペースを持ち、異なる顧客 (仮想マシンの所有者) に属します。各ウェアハウスには独自のウェアハウス マネージャー (現在の仮想マシンのオペレーティング システム カーネル) があり、他のウェアハウスを管理することはできません。情報の共有はありません。

したがって、Docker テクノロジを使用するか、サーバー仮想化テクノロジを使用するか、さまざまなアプリケーション シナリオやニーズに応じて、さまざまな方法を採用する必要があります。

Docker と仮想マシンの実装原理の比較

次の図は、仮想マシンと Docker の実装フレームワークをそれぞれ示しています。

docker は物理マシン上で実行されますか? それとも仮想マシン上で実行されますか?

2 つの図の違いを比較すると、左側の図の仮想マシンのゲスト OS レイヤーとハイパーバイザー レイヤーは、docker の Docker エンジン レイヤーに置き換えられています。仮想マシンのゲスト OS は、仮想マシンにインストールされるオペレーティング システムであり、完全なオペレーティング システム カーネルです。仮想マシンのハイパーバイザ層は、カーネル状態ドライバーとして存在するハードウェア仮想化プラットフォームとして単純に理解できます。ホストOS内で。

仮想マシンがリソース分離を実現する方法は、独立したOSを使用し、ハイパーバイザーを使用してCPU、メモリ、IOデバイスなどを仮想化することです。たとえば、仮想 CPU の場合、ハイパーバイザーは各仮想 CPU のデータ構造を作成し、CPU のすべてのレジスタの値をシミュレートし、必要に応じてこれらの値を追跡および変更します。ほとんどの場合、仮想マシン ソフトウェア コードは、ハイパーバイザーの介入なしにハードウェア上で直接実行されることに注意してください。一部の高い特権リクエストの下でのみ、ゲスト OS はカーネル モードを実行して CPU のレジスタ データを変更する必要があり、ハイパーバイザーが介入して仮想 CPU の状態を変更および維持します。

ハイパーバイザーがメモリを仮想化する方法は、シャドウ ページ テーブルを作成することです。通常の状況では、ページ テーブルを使用して仮想メモリから物理メモリに変換できます。仮想化の場合、いわゆる物理メモリは依然として仮想であるため、シャドウ ページ テーブルは、仮想メモリ -> 仮想物理メモリ -> 実物理メモリを実行する必要があります。

IO デバイス仮想化の場合、ハイパーバイザーがページ フォールトを受信し、仮想物理メモリ アドレスが実際に I/O デバイスに対応していることが判明すると、ハイパーバイザーはソフトウェアを使用してこのデバイスの動作条件をシミュレートし、 を返します。たとえば、CPU がディスクに書き込みたい場合、ハイパーバイザーは対応するデータをホスト OS ファイルに書き込みます。このファイルは実際には仮想ディスクをシミュレートします。

仮想マシンのリソースと環境を分離するソリューションと比較すると、docker ははるかにシンプルです。 Docker Engine は、単純に Linux の NameSpace、Cgroup、およびイメージ管理ファイル システム操作のカプセル化として見ることができます。 Docker は、仮想マシンのような完全に独立したゲスト OS を使用せずに、現在 Linux カーネル自体がサポートしているコンテナ方式を使用して、リソースと環境の分離を実現します。簡単に言うと、docker はネームスペースを使用してシステム環境を分離し、Cgroup を使用してリソース制限を実装し、ミラーリングを使用してルート ディレクトリ環境を分離します。

推奨される学習: 「docker ビデオ チュートリアル

以上がdocker は物理マシン上で実行されますか? それとも仮想マシン上で実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。