仮想マシン(VM)は、多くの仮想化技術のための非常に一般的な用語です。
仮想化テクノロジーには多くのバリエーションがありますが、主なものは次のとおりです。
- ハードウェアレベルの仮想化
- オペレーティングシステムレベルの仮想化
qemu-kvm
とVMWare
最初の例です。ハイパーバイザーを使用して、完全なオペレーティングシステムが実行される仮想環境を管理します。たとえば、qemu-kvm
システムでは、1つのVMでFreeBSD、別のVMでWindows、別のVMでLinuxを実行できます。
これらのテクノロジーによって作成された仮想マシンは、ゲストに対して隔離された個々のコンピューターのように動作します。これらには、ゲストが本物の記事であると信じている仮想CPU、RAM、NIC、グラフィックスなどがあります。このため、VMにはさまざまなオペレーティングシステムをインストールでき、変更を加えることなく「そのまま」動作します。
これは非常に便利ですが、多くのOSは簡単にインストールできますが、ハイパーバイザーがすべてのハードウェアをシミュレートする必要があるため、速度が低下する可能性があるという欠点があります。代替手段は、準仮想化ハードウェアであり、仮想環境でのパフォーマンスを目的として設計されたゲスト用に新しい仮想デバイスとドライバーが開発されます。 このためのデバイスとドライバーの範囲をqemu-kvm
提供しvirtio
ます。これの欠点は、ゲストOSをサポートする必要があることです。ただし、サポートされている場合、パフォーマンス上のメリットは非常に大きくなります。
lxc
オペレーティングシステムレベルの仮想化またはコンテナの例です。このシステムでは、1つのカーネル(ホストカーネル)のみがインストールされています。各コンテナーは、単にユーザーランドプロセスの分離です。たとえば、Webサーバー(たとえばapache
)がコンテナにインストールされています。そのWebサーバーに関する限り、インストールされているサーバーはそれ自体です。別のコンテナがFTPサーバーを実行している可能性があります。そのFTPサーバーは、Webサーバーのインストールを認識していません-それだけがインストールされています。別のコンテナーには、Linuxディストリビューションの完全なユーザーランドインストールを含めることができます(そのディストリビューションがホストシステムのカーネルで実行できる限り)。
ただし、コンテナを使用する場合、個別のオペレーティングシステムのインストールはありません。ユーザーランドサービスの分離されたインスタンスのみです。このため、コンテナに異なるプラットフォームをインストールすることはできません-Linux上のWindowsはインストールできません。
コンテナは通常、を使用して作成されchroot
ます。これにより、/
プロセスで使用する個別のプライベートルート()が作成されます。多くの個別のプライベートルートを作成することにより、プロセス(Webサーバー、またはLinuxディストリビューションなど)は、独自の分離されたファイルシステムで実行されます。などのより高度な手法では、cgroups
ネットワークやRAMなどの他のリソースを分離できます。
どちらにも長所と短所があり、どちらが最善であるかについて、長期にわたる多くの議論があります。
- コンテナは軽量で、それぞれに完全なOSがインストールされていません。これはハイパーバイザーの場合です。したがって、それらは低スペックのハードウェアで実行できます。ただし、Linuxゲスト(Linuxホスト上)のみを実行できます。また、カーネルを共有しているため、侵害されたコンテナが別のコンテナに影響を与える可能性があります。
- ハイパーバイザはより安全であり、フルOSが各VMにインストールされ、ゲストは他のVMを認識しないため、異なるOSを実行できます。ただし、これはホストでより多くのリソースを利用するため、比較的強力でなければなりません。