OS レベルの仮想化は、カーネルがコンテナ( LXC、Solaris コンテナ、AIX WPAR、HP-UX SRP コンテナ、Docker、Podman、Guix )、ゾーン( Solaris コンテナ)、仮想プライベート サーバー( OpenVZ )、パーティション、仮想環境( VE )、仮想カーネル( DragonFly BSD )、jail ( FreeBSD jailおよびchroot )など、複数の分離されたユーザースペースインスタンスの存在を可能にするオペレーティングシステム( OS) 仮想化パラダイムです。 [ 1 ]このようなインスタンスは、その中で実行されているプログラムの観点からは、実際のコンピュータのように見える場合があります。通常のオペレーティングシステム上で実行されているコンピュータ プログラムは、そのコンピュータのすべてのリソース (接続されているデバイス、ファイルとフォルダ、ネットワーク共有、CPU パワー、定量化可能なハードウェア機能) を参照できます。コンテナ内で実行されているプログラムは、コンテナの内容とコンテナに割り当てられたデバイスのみを参照できます。
Unix 系オペレーティングシステムでは、この機能は、現在実行中のプロセスとその子プロセスの見かけ上のルートフォルダを変更する標準のchrootメカニズムの高度な実装と見なすことができます。分離メカニズムに加えて、カーネルは、あるコンテナのアクティビティが他のコンテナに与える影響を制限するために、リソース管理機能を提供することがよくあります。Linux コンテナはすべて、 Linux カーネルが提供する仮想化、分離、およびリソース管理メカニズム、特にLinux 名前空間とcgroupsに基づいています。[ 2 ]
コンテナという言葉は、一般的にはOSレベルの仮想化を指しますが、 MicrosoftのHyper-Vコンテナのように、ホストOSと様々なレベルで連携して動作する、より完全な仮想マシンを指す場合もあります。1960年以降の仮想化の概要については、「仮想化技術のタイムライン」を参照してください。
一般的なパーソナルコンピュータのオペレーティングシステムでは、コンピュータプログラムは(アクセスできない場合でも)システムのすべてのリソースを認識できます。それらには以下が含まれます。
オペレーティングシステムは、どのプログラムがリソースを要求したか、また実行環境におけるユーザーアカウントに基づいて、これらのリソースへのアクセスを許可または拒否する場合があります。また、オペレーティングシステムはこれらのリソースを隠蔽することもあり、その場合、コンピュータプログラムがリソースを列挙しても、列挙結果には表示されません。しかしながら、プログラミングの観点から見ると、コンピュータプログラムはこれらのリソースとやり取りを行い、オペレーティングシステムはそのやり取りを管理したことになります。
オペレーティングシステムの仮想化、すなわちコンテナ化を用いることで、リソースの一部のみを割り当てたコンテナ内でプログラムを実行することが可能になります。コンピュータ全体を利用できると想定していたプログラムは、コンテナ内で実行されると、割り当てられたリソースしか認識できず、それが利用可能なすべてのリソースであると認識します。各オペレーティングシステム上に複数のコンテナを作成でき、それぞれのコンテナにコンピュータのリソースの一部が割り当てられます。各コンテナには任意の数のコンピュータプログラムを含めることができます。これらのプログラムは同時に実行することも、個別に実行することもでき、互いに相互作用することも可能です。
コンテナ化はアプリケーション仮想化と類似点がある。後者では、1つのコンピュータプログラムのみが隔離されたコンテナ内に配置され、隔離はファイルシステムのみに適用される。
オペレーティングシステムレベルの仮想化は、仮想ホスティング環境で一般的に使用されており、相互に信頼関係のない多数のユーザー間で限られたハードウェアリソースを安全に割り当てるのに役立ちます。システム管理者は、別々のホスト上のサービスを1台のサーバー上のコンテナに移動することで、サーバーハードウェアを統合するためにもこれを利用することがあります。
Operating-system level virtualization can also be used to run software created for a certain Linux distribution on another distribution, an example is Distrobox.[3]
Other typical scenarios include separating several programs to separate containers for improved security, hardware independence, and added resource management features.[4] The improved security provided by the use of a chroot mechanism, however, is not perfect.[5] Operating-system-level virtualization implementations capable of live migration can also be used for dynamic load balancing of containers between nodes in a cluster.
Operating-system level virtualization usually imposes less overhead than full virtualization because programs in OS-level virtual partitions use the operating system's normal system call interface and do not need to be subjected to emulation or be run in an intermediate virtual machine, as is the case with full virtualization (such as VMware ESXi, QEMU, or Hyper-V) and paravirtualization (such as Xen or User-mode Linux). This form of virtualization also does not require hardware support for efficient performance.
Operating-system level virtualization is not as flexible as other virtualization approaches since it cannot host a guest operating system different from the host one, or a different guest kernel. For example, with Linux, different distributions are fine, but other operating systems such as Windows cannot be hosted. Operating systems using variable input systematics are subject to limitations within the virtualized architecture. Adaptation methods including cloud-server relay analytics maintain the OS-level virtual environment within these applications.[6]
Solaris は、Solaris 10 ホスト上で古いSolaris 8または 9 バージョンをエミュレートする環境をコンテナ内で実行できるブランド ゾーン機能により、上記の制限を部分的に克服しています。Linux ブランド ゾーン (「lx」ブランド ゾーンと呼ばれます) は、x86ベースの Solaris システムでも利用可能で、完全な Linuxユーザー スペースと Linux アプリケーションの実行のサポートを提供します。さらに、Solaris は、 「lx」ゾーン内にRed Hat Enterprise Linux 3.x またはCentOS 3.x Linux ディストリビューションをインストールするために必要なユーティリティを提供します。[ 7 ] [ 8 ]しかし、2010 年に Linux ブランド ゾーンは Solaris から削除されました。2014 年に、 32 ビットLinux カーネルをサポートするオープンソースのSolaris フォークであるIllumos で再導入されました。[ 9 ]
一部の実装では、ファイルレベルのコピーオンライト(CoW)メカニズムが提供されています。(最も一般的なのは、標準ファイルシステムをパーティション間で共有し、ファイルを変更するパーティションが自動的に独自のコピーを作成する方式です。)これは、システム全体仮想化で一般的なブロックレベルのコピーオンライト方式よりも、バックアップが容易で、スペース効率が良く、キャッシュもシンプルです。ただし、システム全体仮想化では、ネイティブ以外のファイルシステムを扱ったり、システム全体の状態のスナップショットを作成・ロールバックしたりすることも可能です。
Linux OpenVZ、Linux-VServer、FreeBSD Jails、AIX Workload Partitions (WPARs)、HP-UX Containers (SRP)、Solaris Containers など、他にも多くの OS レベルの仮想化システムがあります。
LXC はユーザー名前空間をサポートするようになりました。 [...] LXC はもはや root 権限で実行されていないため、攻撃者がコンテナから脱出できたとしても、ホスト上で通常のユーザーの権限しか得られません。
は2000年にFreeBSD 4.0で初めて導入されました。
はディスクイメージをコピーオンライトとして扱います。