web-dev-qa-db-ja.com

LinuxコンテナーとLinuxハイパーバイザーとは何ですか?

私はstackexchangeサイトを見ましたが、何も見つかりませんでした。 LinuxコンテナーのWikipediaエントリ https://en.wikipedia.org/wiki/LXC とハイパーバイザー https://en.wikipedia.org/wiki/ハイパーバイザー ですが、両方の説明は、どちらにも取り組んでいない人の理解を超えています。私も http://www.linux.com/news/enterprise/cloud-computing/785769-containers-vs-hypervisors-the-battle-has-just-begun を見ましたが、それもありませんそれを説明してください。

VirtualboxなどのVMで遊んだことがあります。私の限られた理解への最初のアイデアの1つは、仮想マシンに関するものだったかもしれません(サンドボックス環境でソフトウェアをテストすることでした(マシンを購入できない/マシンを手に入れることができず、まだソフトウェアの開発方法について何らかのアイデアを持っているときにSolarisボックスを持っている)そのターゲットハードウェアは機能しています。)制限されている間、それを使用していました。これはおそらく、クラウドコンピューティングも飛躍的に進歩させた方法の1つです。質問は幅広いので、これが私がそれを蒸留する方法です-

一部の人々は、ハイパーバイザーと* nixコンテナーが何であるかを説明できますか(可能な場合は類似しています)
* nixハイパーバイザーは仮想マシンと同じですか、それとも違いがありますか?

10
shirish

A 仮想マシン(VM)は、多くの仮想化テクノロジの総称です。

仮想化テクノロジーには多くのバリエーションがありますが、主なものは次のとおりです。

  • ハードウェアレベルの仮想化
  • オペレーティングシステムレベルの仮想化

qemu-kvmVMWareは最初の例です。ハイパーバイザーを使用して、完全なオペレーティングシステムが実行される仮想環境を管理します。たとえば、qemu-kvmシステム1つVM FreeBSD、別のWindows、別のLinuxを実行できます。

これらのテクノロジーによって作成された仮想マシンは、ゲストに対して隔離された個々のコンピューターのように動作します。これらには、ゲストが本物の記事であると信じている仮想CPU、RAM、NIC、グラフィックスなどがあります。このため、VMにはさまざまなオペレーティングシステムをインストールでき、変更を加えることなく「そのまま」動作します。

これは非常に便利ですが、多くのOSは簡単にインストールできますが、ハイパーバイザーがすべてのハードウェアをシミュレートする必要があるため、速度が低下する可能性があります。代替手段は、準仮想化ハードウェアであり、仮想環境でのパフォーマンスを目的として設計されたゲスト用に新しい仮想デバイスとドライバーが開発されます。 qemu-kvmvirtio範囲のデバイスとドライバーを提供します。これの欠点は、ゲストOSをサポートする必要があることです。ただし、サポートされている場合、パフォーマンスのメリットは非常に大きくなります。


lxcは、オペレーティングシステムレベルの仮想化またはコンテナの例です。このシステムでは、1つのカーネル(ホストカーネル)のみがインストールされています。各コンテナーは、単にユーザーランドプロセスの分離です。たとえば、Webサーバー(たとえば、Apache)はコンテナーにインストールされます。そのWebサーバーに関する限り、インストールされているサーバーはそれ自体です。別のコンテナがFTPサーバーを実行している可能性があります。そのFTPサーバーは、Webサーバーのインストールを認識していません-それだけがインストールされています。別のコンテナーには、Linuxディストリビューションの完全なユーザーランドインストールを含めることができます(そのディストリビューションがホストシステムのカーネルで実行できる限り)。

ただし、コンテナを使用する場合、個別のオペレーティングシステムのインストールはありません。ユーザーランドサービスの分離されたインスタンスのみです。このため、コンテナに異なるプラットフォームをインストールすることはできません-Linux上のWindowsはインストールできません。

コンテナーは通常、chrootを使用して作成されます。これにより、個別のプライベートルート(/)プロセスで使用します。多くの個別のプライベートルートを作成することにより、プロセス(Webサーバー、またはLinuxディストリビューションなど)は、独自の分離されたファイルシステムで実行されます。 cgroupsなどのより高度な手法により、ネットワークやRAMなどの他のリソースを分離できます。


どちらにも長所と短所があり、どちらが最善かについては、長期にわたる多くの議論があります。

  • コンテナは軽量で、それぞれに完全なOSがインストールされていません。これはハイパーバイザーの場合です。したがって、それらは低スペックのハードウェアで実行できます。ただし、(Linuxホスト上で)Linuxゲストのみを実行できます。また、カーネルを共有しているため、侵害されたコンテナが別のコンテナに影響を与える可能性があります。
  • ハイパーバイザーはより安全であり、フルOSが各VMにインストールされており、ゲストは他のVMに気づいていないため、異なるOSを実行できます。ただし、これはホスト上のより多くのリソースを使用する必要があります。比較的強力です。
9
garethTheRed

コンテナーは chroot環境 に少し似ていますが、ユーザー空間をより完全に分離できる点が異なります。実際のVMではなく、仮想オペレーティングシステムを提供します。 VMは複数のマシンのような錯覚を引き起こし、そのそれぞれの中で、実際の完全なオペレーティングシステムがベアメタル上であるかのように実行できます。ここでの「完全なオペレーティングシステム」には、カーネルが含まれます。一部のVM(例 [〜#〜] qemu [〜#〜] )では、さまざまな種類の「ベアメタル」アーキテクチャを刺激することもできます。

代わりに、コンテナは、それぞれが完全なユーザーランドを実行している複数のカーネルのような錯覚を作り出します。たとえば、あるコンテナでDebianを実行し、別のコンテナでArchを実行することができるため、コンテナ内からの視点はVMとほとんど同じです。ただし、実行できるのは、1つの実際のカーネル(この場合はLinux)と互換性のあるOSユーザーランドのみです。これは実際のVMとは異なり、独立したカーネルを実行できるため、あらゆる種類のオペレーティングシステムを実行できます。

そのため、真のVMはコンテナよりもリソースの点で高価です。 VMごとに異なるカーネルが必要ない場合は、コンテナーを使用することもできます。

VPSベンダーによって広く使用されている openVZ など、LXEに似た処理を行う他の仮想化システムがあります。 openVZ VPSは、ホストOSのカーネルを使用する独立したユーザーランドです。これが、このようなVPSがLinuxフレーバーの束で提供される理由です。それらはホストカーネルと互換性がなければなりません。

OpenVZおよびLXCスタイルの仮想化は、オペレーティングシステムレベルの仮想化と呼ばれます。

hypervisorは、 VirtualBox 、QEMU、または Xen などの仮想マシンを管理するシステムです。 Xenなどの一部のハイパーバイザーはベアメタルで実行され、ホストOSを必要としません(ただし、ホストOSが制御インターフェイスとして機能する必要がある場合があります)。 VirtualBoxやQEMUなどの他のものは、ホストOS内で実行されます。 QEMUなどの一部では、さまざまなマシンアーキテクチャのシミュレーションが可能です。 VirtualBoxなどの他のものは、これを行いません(つまり、VMアーキテクチャは常に実際のホストと同じです)。実際のVMがコンテナよりも多くのリソースを必要とするのと同じように、アーキテクチャをシミュレートするにはより多くのリソースが必要です。

ハイパーバイザースタイルの仮想化は、プラットフォームレベルの仮想化と呼ばれます。

2
goldilocks