回答:
「平易な英語」によってあなたが非技術者を意味するならば、違いは簡単に説明することができません。その髪は細かすぎて、細心の注意を払わなければ分割できません。
「平易な英語」とは、技術的な人々と話し、したがって少なくとも技術的なトピックについてある程度理解している管理タイプを意味する場合、私は次の言い回しを提出します。
これは仮想化の別の形式です。
VMWare ESXiを見ると、これはいわゆる完全仮想化と呼ばれるものを実行する完全ハイパーバイザーです。ハードウェア上で実行されている仮想化システム間には非常に小さなレイヤーがあります。完全なハードウェア仮想化があり、仮想マシンで実行されているOSはハイパーバイザー自体から完全に独立しており、期待されるすべてのハードウェアが提供されます。
別のステップを踏んで、VMWare Player、Workstation、ESX(ESXiではない)、またはVMWare Serverなどを確認すると、ハイパーバイザーの役割を提供する完全なオペレーティングシステムがあります。ただし、仮想マシンには仮想ハードウェアの完全な配列が引き続き提供されます。
もう1つのアプローチは、準仮想化です。これは、Xenがかなり長い間従ったものです。この仮想化の形式では、ゲストオペレーティングシステムは仮想化されていることを認識し、その環境で動作するように変更されています。時々、このすべてのニーズは特別な準仮想化ドライバーです。また、完全なカーネルの変更が必要な場合もあります。
LXC、またはLinuxコンテナーは、さらにもう1つのステップです。この場合、まったく同じオペレーティングシステムの複数のインスタンスを実行しています。カーネルは同じである可能性がありますが、OSコンテナごとに複数のユーザー空間が実行されています。コンテナごとに異なるファイルシステムが存在する場合と存在しない場合があります。
コンテナーは、同じユーザー空間を持つシステムでは利用できない方法でプロセス間の強力なセキュリティ分離を提供する方法を提供します。Unixライクなオペレーティングシステムにはかなり長い間「chroot jail」がありましたが、プロセスの分離や、jail内のプロセスによって消費されるリソースを制限する機能は提供されていません。このようなプロセスをコンテナ化することで、リソースの使用を制限し、個別のIPアドレスをそれらに割り当てることができ、システムの残りの部分からユーザー空間を悪用するセキュリティの脆弱性を封じ込めます。
LXCを他のタイプの仮想化と比較してどこで使用しますか?状況によって異なりますが、LXC は、物理ハードウェアと通信することを期待するOSイメージの束に対してハードウェアであるように見せかけるハイパーバイザーではなく、すべてのユーザー空間呼び出しを仲介する同じカーネルであるため、他の仮想化方法よりも仮想化のペナルティが少ないはずです。したがって、同じOSバージョンを必要とする一連の処理があり、更新のために同時に再起動できる場合、LXCはそれらすべてを安全かつリソース管理で実行するための低コストの方法を提供できます。
LXCは、カーネルでシステム/プロセスを分離するための手段です。システムは「コンテナ」にロックされているため、そのコンテナの外部とは対話できません。したがって、Linuxコンテナという名前です。
これは多くの場合に役立ちます。その1つは、マシンで実行されているサービスを分離することです。これらのサービスの1つが侵害されても、ホストシステム自体は(独自のLXCで実行されている他のサービスとともに)影響を受けません。各ユーザーに自分のシステムへのrootアクセス権を与えるためのばかげた手段として使用することもでき、ユーザー同士がやり取りする心配はありません。
他のほとんどの「一般的な」仮想化では、ハードウェアデバイスをエミュレートする必要があるため、リソースの使用に大きなオーバーヘッドがかかります。各LXCにはハードウェアへの直接アクセスが制限されているため、LXCではハードウェアデバイスのエミュレーションは必要ありません。各システムはホスト上で「実行中」ですが、コンテナの外部には影響を与えません。このタイプの仮想化は、OSレベルの仮想化と呼ばれています(google it)。これは本質的に、Linuxコンテナを実行するためのオーバーヘッドがほとんどないか、存在しないことを意味します。そのため、特定のマシンで数百のLXCを使用できますが、「一般的な」仮想マシンソフトウェアを使用すると、すぐにリソースが不足します。
私は実際にはLinux-Vserverに慣れていますが、理論はほとんど同じです。
それを理解する最も簡単な方法は、chrootの機能を学ぶことです。chrootを使用すると、UNIXライクなシステムのフォルダに、まるでそれ自体が完全なシステムであるかのように「ログイン」できます。言い換えると:
あなたが持っている場合:
/
/boot
/etc
/home
...
など、some_new_installディレクトリを追加できます。
/
/some_new_install
/boot
/etc
/home
/usr
...
/boot
/etc
/home
/usr
...
/ some_new_installにログインします。たとえば、/ some_new_install / etcは新しい/ etcであり、元の/ etcは非表示になっており、(ほとんどの場合)アクセスできません。/ usr / binは、プログラムが異なるため、オリジナルとは異なる場合があります。MySQLは/ usr / bin / mysql内の同じプログラムである可能性がありますが、/ var / lib / mysql内のデータは異なります。
ファイルシステムは仮想化されています。元のファイルシステムを分割して、そのリソースを共有し、それらのリソースを他の仮想化リソースから分離しました。
これはかなり素晴らしいです。unixのまったく新しい仮想コピーを実行する代わりに、1つの追加プログラムを実行するだけで、仮想ファイルシステムにジャンプして、同じカーネル、同じライブラリ(シンボリックリンクを使用した場合)などで実行できます。これは、 XenやVirtualBoxなど。
問題は、これらのプログラムの1つ(MySQLなど)が異常終了し、すべてのCPUの使用とディスク上のスワッピングを開始した場合でも、CPUではなくファイルシステムのみが仮想化されているため、マシンの残りの部分に影響を与えることです。または基になるディスクのパフォーマンス。IPアドレスとポートも仮想化されていないため、2つのプログラムがネットワーク上で情報を送信すると、同じIPから送信され、競合が発生する可能性があります。同様に、mysqlの2つのコピーがポートをリッスンしようとすると、ポートが使用中であるため、2番目のコピーは失敗します。
LXCは、ファイルシステムだけでなく、ネットワークのips / ports / interfaces、CPU、メモリ使用量なども仮想化することでこれを解決します。
LXCは完全な仮想マシンほど安全ではありませんが、一般的にはLXCが優れたソリューションです。結局のところ、オペレーティングシステムはリソースを安全に共有することです。ほとんどの場合、それを実行するために複数のOSを実行するのはばかげています-必要なのは、より優れた分離とより優れたOSだけです。それがLXCや同様のツールが提供するものです。