はじめに
両方の仮想マシン およびコンテナ アプリケーションまたはソフトウェアを開発およびテストするための分離された仮想環境を作成するために使用されます。問題は、それらがどのように異なるかです。
この記事では、コンテナーとVMの違いを理解するのに役立つ2つの概念について説明します。コンテナと仮想マシンを別々に定義するだけでなく、並べて定義して、一方が他方と異なる点を確認します。
仮想マシン(VM)とは何ですか?
仮想マシン(VM) 1台のサーバーの物理リソースを共有するオペレーティングシステムです。ホストのハードウェア上のゲストであるため、ゲストマシンとも呼ばれます。 。
仮想マシンを構成するいくつかのレイヤーがあります。仮想化を可能にするレイヤーは、ハイパーバイザーです。 。ハイパーバイザーは、サーバーを仮想化するソフトウェアです。
仮想マシンの仕組み
アプリの実行に必要なものはすべて仮想マシンに含まれています。仮想化されたハードウェア、OS、および必要なバイナリとライブラリです。したがって、仮想マシンには独自のインフラストラクチャがあり、自己完結型です。
各VMは、ホストオペレーティングシステムから完全に分離されています。また、独自のOSが必要であり、ホストのOSとは異なる場合があります。それぞれに独自のバイナリ、ライブラリ、およびアプリケーションがあります。
仮想マシンモニター(VMM) :ハイパーバイザーの別名
ホストマシン :VMがインストールされているハードウェア
ゲスト マシン :VMの別名
仮想マシン:PROS
VMは経費を削減します 。仮想マシンを使用すると、単一のサーバーでアプリケーションを実行する代わりに、1つの物理リソースを利用して多くのジョブを実行できます。したがって、サーバーの列挙可能なスタックを購入、保守、および保管する必要はありません。
ホストマシンが1台あるため、効率的に管理できます。 ハイパーバイザーのパワーを一元化したすべての仮想環境。これらのシステムは互いに完全に分離されているため、複数のシステム環境をインストールできます。 。
最も重要なことは、仮想マシンがホストOSから分離されており、安全であることです。 アプリケーションの実験と開発のための場所。
仮想マシン:短所
仮想マシンは多くのシステムリソースを消費する可能性があります ホストマシンのサイズは数GBです。仮想サーバーで単一のアプリを実行するということは、オペレーティングシステムのコピーと、システムの実行に必要なすべてのハードウェアの仮想コピーを実行することを意味します。これにより、RAMとCPUのサイクルがすぐに多くなります。
仮想マシンで実行されているアプリを再配置するプロセスも複雑になる可能性があります 常にオペレーティングシステムに接続されているためです。したがって、アプリとそれに伴うOSを移行する必要があります。また、仮想マシンを作成するときに、ハイパーバイザーはVM専用のハードウェアリソースを割り当てます。
仮想マシンが利用可能なすべてのリソースを使用することはめったにないため、計画と配布が困難になる可能性があります。 別々の実際のコンピューターを実行する場合と比較して、それでも経済的です。
人気のVMプロバイダー:
- VMware vSphere
- VirtualBox
- ゼン
- Hyper-V
- KVM
コンテナとは何ですか?
コンテナは、オペレーティングシステムに依存しないアプリケーションを実行する環境です。アプリを仮想化することで、アプリをホストから分離します。これにより、ユーザーは単一のOSインスタンスで複数のワークロードを作成できます。
ホストオペレーティングシステムのカーネルは、コンテナーに分割されたアプリのさまざまな機能を実行するニーズに対応します。各コンテナは分離されたタスクを実行します。ホストマシンに害を及ぼすことも、別のコンテナで実行されている他のアプリと競合することもありません。
コンテナはどのように機能しますか?
コンテナ内で作業する場合、必要な環境のテンプレートを作成できます。コンテナは基本的に特定の時間にシステムのスナップショットを実行し、アプリの動作に一貫性を提供します。
コンテナはホストのカーネルを共有して、コンテナ内のすべての個々のアプリを実行します。各コンテナに必要な要素は、ビン、ライブラリ、その他のランタイムコンポーネントだけです。
コンテナ:PROS
コンテナは10MBまで小さくすることができ、メモリとCPU使用率を簡単に制限できます。これにより、コンテナは非常に軽量になります および起動が速い オペレーティングシステム全体を展開する必要がある仮想マシンの展開とは対照的です。
サイズが大きいため、すばやくスケーリングできます コンテナの内外で同じコンテナを追加します。
また、コンテナは継続的インテグレーションと継続的デプロイに最適です。 (CI / CD)の実装。開発者間で画像を配布およびマージすることにより、共同開発を促進します。
コンテナ:短所
コンテナはホストOSのカーネルを使用し、オペレーティングシステムに依存します。したがって、コンテナーは依存関係によって基盤となるOSと異なる可能性がありますが、タイプによっては異なりません。ホストのカーネルは他のオペレーティングシステムの使用を制限します 。
コンテナはまだ同じセキュリティと安定性を提供していません そのVMはできます。これらはホストのカーネルを共有しているため、仮想マシンほど分離することはできません。その結果、コンテナはプロセスレベルで分離され、カーネルの安定性を損なうことで1つのコンテナが他のコンテナに影響を与える可能性があります。
さらに、コンテナがそのタスクを実行すると、コンテナはシャットダウンし、その中のすべてのデータを削除します。データをホストサーバーに残したい場合は、データボリュームを使用してデータを保存する必要があります。これには、手動の構成とプロビジョニングが必要です。 ホスト上で。
人気のコンテナプロバイダー:
- Docker
- AWS
- LXD
- Javaコンテナ
- Hyper-Vコンテナ
- WindowsServerコンテナ
VMとコンテナの選択方法
仮想マシンとコンテナのどちらを使用するかは、仮想環境で実行する作業によって異なります。
次のことが必要な場合は、仮想マシンの方が優れたソリューションです。
- さまざまなオペレーティングシステムを管理する
- 1台のサーバーで複数のアプリを管理する
- OSのすべてのリソースと機能を必要とするアプリを実行する
- 完全な分離とセキュリティを確保する
次のことが必要な場合は、コンテナが適しています。
- サーバーで実行されているアプリの数を最大化する
- 単一のアプリケーションの複数のインスタンスをデプロイする
- すばやく起動する軽量システムを用意する
- 基盤となるインフラストラクチャで実行されるアプリケーションを開発する
仮想マシンは一般的に使用されます 要求の厳しいアプリケーション、ネットワークインフラストラクチャ、およびVMのリソースのほとんどを消費するアプリ。
コンテナは一般的に使用されます Web、アプリケーションとキャッシングサービス、ネットワークデーモン、および小さなデータベース。