ホームページ  >  記事  >  運用・保守  >  Docker コンテナと従来の仮想化の違いは何ですか?

Docker コンテナと従来の仮想化の違いは何ですか?

WBOY
WBOYオリジナル
2022-01-28 10:36:3011271ブラウズ

違い: 1. 従来の仮想化の作成速度は非常に遅いですが、コンテナ仮想化の作成速度は非常に速いです; 2. 従来の仮想化はシステム調整チェーンにリンクを追加し、パフォーマンスの損失を引き起こしますが、コンテナ仮想化は共通のコアを持ち、パフォーマンスの損失はほとんどありません; 3. 従来の仮想化は複数のオペレーティング システムをサポートしますが、コンテナ仮想化はカーネルがサポートするオペレーティング システムのみをサポートします。

Docker コンテナと従来の仮想化の違いは何ですか?

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

Docker コンテナと従来の仮想化の違いは何ですか

従来の仮想化テクノロジ

仮想化とは、仮想化テクノロジの論理コンピュータによって 1 台のコンピュータを複数のコンピュータに仮想化することを指します。 1台の計算機上で複数の論理計算機を同時に動作させることができ、論理計算機ごとに異なるOSを実行することができ、アプリケーションを互いに影響を与えることなく独立した空間で実行できるため、計算機の作業効率が大幅に向上します。

ハードウェア メーカーの継続的な開発により、仮想マシン内の多くの命令は、仮想ハードウェア層を経由して実際のハードウェア層に到達する必要がなくなりました。ハードウェア メーカーは、仮想マシン内でハードウェアを直接操作する実用的な命令をサポートしています。私たちがハードウェア支援仮想化と呼ぶテクノロジーは、ソフトウェア仮想化のハードウェア層と比較して、この種のハードウェア支援仮想化では、すべてのハードウェアをシミュレートする必要がありません。一部の命令は仮想マシン上で直接実行され、ハードウェアを操作します。パフォーマンス

システムレベルの仮想化

特徴:

ハードウェア層をシミュレートする必要はありません。

カーネルを共有します。同じホスト

従来の仮想化とコンテナ仮想化の違い

Docker コンテナと従来の仮想化の違いは何ですか?

コンテナのコアテクノロジー

1.CGroupコンテナのリソース使用量を制限します。

2.コンテナ間の分離を実現するための名前空間メカニズム

3.chroot、ファイル システムの分離。

CGroup:

Linux カーネルは、プロセス グループによって使用されるリソースの制限、記録、分離を提供します。Google エンジニアによって提案され、バックグラウンドはカーネルに統合されます。さまざまなリソース使用量の制御と記録は、さまざまなサブシステムを通じて実現されます。

/sys/fs/cgroup

Namespace :

pid: コンテナが独自のプロセステーブルとスレッド番号 1 を持っています。

net: コンテナが独自のネットワーク情報を持っています

ipc: ipc 通信中、プロセスを識別するには追加情報を追加する必要があります

mnt: 各コンテナーには独自の一意のディレクトリ マウントがあります

utc: 各コンテナーには独立したホスト名とドメイン

chrootがあります:

ホスト内の特定のディレクトリは、コンテナ内のルート ディレクトリです。

すべてのアプリケーションには独自の依存関係があり、その中にはソフトウェア リソースとハードウェア リソースが含まれます。 Docker は、各アプリケーションをコンテナーにパッケージ化することで依存関係を分離する、開発者向けのオープン プラットフォームです。コンテナーは、数千ノードまで拡張できる軽量の仮想マシンのようなもので、異なる仮想環境で同じアプリケーションを実行することでクラウドの移植性を高めるのに役立ちます。仮想マシンは、仮想マシンを使用して分離とリソース制御を実現するためにクラウド コンピューティングで広く使用されています。仮想マシンは、独自のメモリ管理を備えた完全なオペレーティング システムをロードし、高可用性を確保しながらアプリケーションの効率と安全性を高めます。

Docker コンテナと仮想マシンの違いは何ですか?

仮想マシンには完全なオペレーティング システムが搭載されており、独自のメモリ管理は関連する仮想デバイスを通じてサポートされます。仮想マシンでは、効率的なリソースがユーザーのオペレーティング システムとハイパーバイザーに割り当てられ、1 つ以上のオペレーティング システムの複数のインスタンスを 1 台のコンピューター (またはホスト) 上で並行して実行できます。各ゲスト オペレーティング システムは、ホスト システム内で単一のエンティティとして実行されます。

一方、Docker コンテナは、ハイパーバイザーではなく Docker エンジンを使用して実行されます。したがって、コンテナーは仮想マシンよりも小さく、ホスト カーネルの共有により高速に起動でき、パフォーマンスが向上し、分離が少なく、互換性が向上します。 Docker コンテナーはカーネルを共有し、アプリケーション ライブラリを共有できるため、コンテナーは仮想マシンよりもシステム オーバーヘッドが低くなります。ユーザーが共有オペレーティング システムを提供するために単一のプラットフォームを使用する意思がある限り、コンテナーは高速になり、使用するリソースも少なくなります。仮想マシンの作成と起動には数分かかる場合がありますが、コンテナの作成と起動にはわずか数秒しかかかりません。コンテナーに含まれるアプリケーションは、仮想マシンでアプリケーションを実行する場合に比べて優れたパフォーマンスを提供します。

Docker コンテナが仮想マシンよりも弱いことを示す重要な指標の 1 つは「分離」です。 Intel の VT-d および VT-x テクノロジは、仮想マシンにリング 1 ハードウェア分離テクノロジを提供するため、仮想マシンはそのテクノロジを最大限に活用できます。これにより、仮想マシンがリソースを効率的に使用し、相互の干渉を防ぐことができます。また、Docker コンテナにはハードウェア分離機能がないため、攻撃に対して脆弱になります。

どうやって選べばいいの?

コンテナーまたは仮想マシンの選択は、アプリケーションの設計方法によって異なります。アプリケーションがスケーラビリティと高可用性を提供するように設計されている場合は、コンテナが最適な選択です。それ以外の場合は、アプリケーションを仮想マシンに配置できます。データベース サービスなど、高い I/O 要件があるビジネスの場合は、Docker 物理マシンをデプロイすることをお勧めします。これは、Docker を仮想マシンにデプロイすると、仮想マシンによって I/O パフォーマンスが制限されるためです。テナントの権限やセキュリティを重視する仮想デスクトップ サービスなどのビジネスには、仮想マシンの使用をお勧めします。仮想マシンのマルチテナントの強力な分離機能により、テナントが仮想マシン上で root 権限を持っている間、他のテナントやホストは安全であることが保証されます。 。

あるいは、より良いオプションは、仮想マシンでコンテナを実行するハイブリッド ソリューションです。 Docker コンテナは仮想マシン内で実行でき、実証済みの分離、セキュリティ特性、モビリティ、動的仮想ネットワーキングなどを仮想マシンに提供します。安全な分離とリソースの高い利用率を実現するには、基本的に、異なるテナントのビジネス運営に仮想マシンの分離を使用するという考えに従い、同じタイプのビジネスを同じコンテナーのセットにデプロイする必要があります。

結論

Docker コンテナは、DevOps 環境における重要なツールになりつつあります。 DevOps の世界には、Docker コンテナの使用例が数多くあります。 Docker コンテナ上でアプリケーションを実行し、どこにでも (クラウド、オンプレミス、または Linux のいずれか) にデプロイすることが現実になりました。

異種環境で動作する仮想マシンは高度な柔軟性を提供しますが、Docker コンテナは主にアプリケーションとその依存関係に焦点を当てています。 Docker コンテナを使用すると、各クラウドの仮想マシン環境を使用してクラウドを処理することにより、クラウド間でアプリケーション スタックを簡単に移植できます。これは、Docker コンテナーがなければ、より複雑で退屈な方法で実装する必要がある便利な機能を表しています。ここで説明するのは仮想マシンを放棄するということではなく、必要に応じて仮想マシンに加えて実態に応じてDockerコンテナを利用するというものであり、Dockerコンテナによって仮想マシンが完全に不要になるとは考えていません。

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

以上がDocker コンテナと従来の仮想化の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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