(containers-and-vms)= # コンテナと仮想マシンについて Incus は*システムコンテナ*と*仮想マシン*という 2 つの異なるタイプの{ref}`インスタンス `をサポートしています。 Incus はシステムコンテナの実装に Linux カーネルの(`namespaces` や `cgroups` のような)機能を使用します。 これらの機能は稼働中のシステムコンテナをソフトウェアのみで隔離し制限する方法を提供します。 システムコンテナは Linux カーネルのみに基づいています。 仮想マシンを動かす際は、Incus はホストシステムのハードウェアを使用しますが、カーネルは仮想マシンにより提供されます。ですので、仮想マシンはたとえば別の OS を動かすこともできます。 仮想マシンを稼働する際、Incus は稼働する仮想マシンを隔離と制限するための方法としてホストシステムのハードウェア機構を使用します。 ですので、仮想マシンは、例えば、ホストシステムとは異なるオペレーティングシステムを動かすのにも使えます。 | 仮想マシン | アプリケーションコンテナ | システムコンテナ | | :--: | :--: | :--: | | 専用のカーネルを使用 | ホストのカーネルを使用 | ホストのカーネルを使用 | | 別の種類のOSを使用可能 | ホストの Linux のみ使用可能 | ホストの Linux のみ使用可能 | | 比較的多くのリソースを使用 | 比較的少ないリソースを使用 | 比較的少ないリソースを使用 | | ハードウェア仮想化が必要 | ソフトウェアのみ | ソフトウェアのみ | | 複数のアプリケーションを動かせる | 単一のアプリケーションを動かせる | 複数のアプリケーションを動かせる | | Incus でサポート | Docker でサポート | Incus でサポート | ## アプリケーションコンテナとシステムコンテナ (たとえば Docker で提供される)アプリケーションコンテナは単一のプロセスあるいはアプリケーションをパッケージするものです。一方、システムコンテナはホスト上あるいは仮想マシン内で 動かすのと同様な完全なオペレーティングシステムをシミュレートします。 Incus システムコンテナ内で Docker を動かせますが、Docker アプリケーションコンテナ内で Incus を動かそうとは思わないでしょう。 ですので、アプリケーションは分離したコンポーネントを提供するのに適しているのに対して、システムコンテナはライブラリ、アプリケーション、データベースなど、あらゆるソリューションを提供します。さらに、異なるユーザー空間を作成し、それぞれのユーザー空間に属するすべてのプロセスを隔離するためにシステムコンテナを使うこともできます。これらの用途はアプリケーションコンテナ向きではありません。 ![アプリケーションとシステムコンテナ](/images/application-vs-system-containers.svg "アプリケーションとシステムコンテナ") ## 仮想マシンとシステムコンテナ 仮想マシンはホストシステムのハードウェア機構を使って、物理マシンの仮想バージョンを作成します。ホストシステムと仮想マシンの間の境界は、ハードウェア機構により強制されます。一方、システムコンテナは自分自身のカーネルを起動するのではなく、ホストシステムですでに動いている OS カーネルを使用します。複数のシステムコンテナを稼働させる場合、それらすべては同じカーネルを共有しますので、仮想マシンより高速で軽量になります。 Incus ではシステムコンテナと仮想マシンの両方を作成できます。必要な機能のすべてがホストの OS カーネルと互換性がある場合は、システムコンテナを使うとより小さいサイズで高パフォーマンスを得られます。ホストシステムの OS カーネルでサポートされない機能が必要かあるいは完全に異なる OS を使いたい場合は仮想マシンを使ってください。 ![仮想マシンとシステムコンテナ](/images/virtual-machines-vs-system-containers.svg "仮想マシンとシステムコンテナ")