OSレベルの仮想化は、オペレーティングシステム(OS)の仮想化パラダイムであり、カーネルがコンテナ(LXC、Solarisコンテナ、AIX WPAR、HP-UX SRPコンテナ、Docker、Podman)、ゾーン(Solarisコンテナ)、仮想プライベートサーバー(OpenVZ)、パーティション、仮想環境(VE)、仮想カーネル(DragonFly BSD)、jail(FreeBSD jailおよびchroot )を含む複数の分離されたユーザー空間インスタンスの存在を許可する。[1]このようなインスタンスは、その中で実行されているプログラムの観点からは実際のコンピュータのように見える場合があります。通常のオペレーティングシステムで実行されているコンピュータプログラムは、そのコンピュータのすべてのリソース(接続されているデバイス、ファイルとフォルダ、ネットワーク共有、CPUパワー、定量化可能なハードウェア機能)を見ることができます。コンテナ内で実行されているプログラムは、コンテナの内容とコンテナに割り当てられたデバイスのみを見ることができます。
Unix 系オペレーティングシステムでは、この機能は、現在実行中のプロセスとその子プロセスの見かけ上のルートフォルダを変更する標準のchrootメカニズムの高度な実装と見なすことができます。分離メカニズムに加えて、カーネルは、1 つのコンテナのアクティビティが他のコンテナに与える影響を制限するために、リソース管理機能を提供することがよくあります。Linux コンテナはすべて、 Linux カーネルによって提供される仮想化、分離、およびリソース管理メカニズム、特にLinux 名前空間とcgroupに基づいています。[2]
コンテナという言葉は、一般的には OS レベルの仮想化を指しますが、 MicrosoftのHyper-Vコンテナなど、ホスト OS とさまざまなレベルで連携して動作する、より完全な仮想マシンを指す場合もあります[引用が必要] 。 [引用が必要] 1960 年以降の仮想化の概要については、 「仮想化テクノロジのタイムライン」を参照してください。
手術
通常のパーソナル コンピュータのオペレーティング システムでは、コンピュータ プログラムはシステムのすべてのリソースを参照できます (アクセスできない場合でも)。リソースには次のものが含まれます。
- CPUやネットワーク接続などの利用可能なハードウェア機能
- ファイル、フォルダ、ネットワーク共有など、読み取りまたは書き込み可能なデータ
- ウェブカメラ、プリンター、スキャナー、ファックスなど、通信可能な接続された周辺機器
オペレーティング システムは、どのプログラムがリソースを要求したか、およびそのプログラムが実行されるコンテキストのユーザー アカウントに基づいて、そのようなリソースへのアクセスを許可または拒否できる場合があります。また、オペレーティング システムはそれらのリソースを非表示にし、コンピューター プログラムがそれらを列挙したときに列挙結果に表示されないようにすることもできます。それでも、プログラミングの観点からは、コンピューター プログラムはそれらのリソースと対話し、オペレーティング システムは対話の動作を管理しています。
オペレーティング システムの仮想化、またはコンテナ化により、リソースの一部のみが割り当てられているコンテナ内でプログラムを実行できます。コンピュータ全体を参照することを期待しているプログラムは、コンテナ内で実行されると、割り当てられたリソースのみを参照でき、それが利用可能なリソースのすべてであると認識します。各オペレーティング システムで複数のコンテナを作成し、各コンテナにコンピュータのリソースのサブセットを割り当てることができます。各コンテナには、任意の数のコンピュータ プログラムを含めることができます。これらのプログラムは、同時に実行することも、個別に実行することも、相互に対話することもできます。
コンテナ化はアプリケーション仮想化と類似点があります。後者では、分離されたコンテナには 1 つのコンピュータ プログラムのみ配置され、分離はファイル システムにのみ適用されます。
用途
オペレーティング システム レベルの仮想化は、仮想ホスティング環境でよく使用されます。仮想ホスティング環境では、相互に信頼関係のない多数のユーザー間で有限のハードウェア リソースを安全に割り当てるのに役立ちます。また、システム管理者は、別々のホスト上のサービスを 1 つのサーバー上のコンテナーに移動することで、サーバー ハードウェアを統合するために仮想化を使用することもできます。
その他の一般的なシナリオとしては、セキュリティの向上、ハードウェアの独立性、リソース管理機能の追加のために、複数のプログラムを別々のコンテナに分離することが挙げられます。[3]ただし、chrootメカニズムの使用によって提供されるセキュリティの向上は完璧ではありません。[4]ライブマイグレーションが可能なオペレーティングシステムレベルの仮想化実装は、クラスター内のノード間でのコンテナの動的負荷分散にも使用できます。
オーバーヘッド
オペレーティング システム レベルの仮想化では、通常、完全仮想化よりもオーバーヘッドが少なくなります。これは、 OS レベルの仮想パーティション内のプログラムがオペレーティング システムの通常のシステム コールインターフェイスを使用し、完全仮想化 ( VMware ESXi、QEMU、Hyper-Vなど) や準仮想化( Xen、User-mode Linuxなど)の場合のように、エミュレーションの対象になったり、中間の仮想マシンで実行されたりする必要がないためです。この形式の仮想化では、効率的なパフォーマンスのためにハードウェア サポートも必要ありません。
柔軟性
オペレーティングシステムレベルの仮想化は、ホストオペレーティングシステムとは異なるゲストオペレーティングシステムや異なるゲストカーネルをホストできないため、他の仮想化アプローチほど柔軟ではありません。たとえば、Linuxでは、異なるディストリビューションは問題ありませんが、Windowsなどの他のオペレーティングシステムはホストできません。可変入力システムを使用するオペレーティングシステムは、仮想化アーキテクチャ内で制限を受けます。クラウドサーバーリレー分析などの適応方法は、これらのアプリケーション内でOSレベルの仮想環境を維持します。[5]
Solaris は、ブランドゾーン機能によって上記の制限を部分的に克服しています。この機能は、Solaris 10 ホストで古いSolaris 8または 9 バージョンをエミュレートするコンテナ内で環境を実行する機能を提供します。Linux ブランドゾーン (「lx」ブランドゾーンと呼ばれる) もx86ベースの Solaris システムで利用可能で、完全な Linuxユーザー空間と Linux アプリケーションの実行サポートを提供します。さらに、Solaris は、 「lx」ゾーン内にRed Hat Enterprise Linux 3.x またはCentOS 3.x Linux ディストリビューションをインストールするために必要なユーティリティを提供します。[6] [7]ただし、2010 年に Linux ブランドゾーンは Solaris から削除されました。2014 年に、 32 ビットLinux カーネルをサポートするオープンソースのSolaris フォークであるIllumos で再導入されました。[8]
ストレージ
一部の実装では、ファイルレベルのコピーオンライト(CoW) メカニズムが提供されています。(最も一般的なのは、標準のファイル システムがパーティション間で共有され、ファイルを変更するパーティションは自動的に独自のコピーを作成します。) これは、システム全体の仮想化装置で一般的なブロックレベルのコピーオンライト スキームよりもバックアップが簡単で、スペース効率が高く、キャッシュが簡単です。ただし、システム全体の仮想化装置は、非ネイティブ ファイル システムで動作し、システム全体の状態のスナップショットを作成およびロールバックできます。
実装
上記に記載されていない Linux コンテナーには次のものがあります。
- LXD 、 Canonicalが開発したLXCの代替ラッパー[43]
- Podman [44]は、OCIやDockerイメージを含む複数のコンテナイメージ形式をサポートする、Kubernetes対応のルートレスで安全なDockerの代替品です。
- Charliecloud、HPCシステムで使用されるコンテナツールセット[45]
- カタコンテナマイクロVMプラットフォーム[46]
- Bottlerocketは、 Amazon Web Servicesが仮想マシンまたはベアメタルホスト上でコンテナを実行するために特別に構築したLinuxベースのオープンソースオペレーティングシステムです[47]
- Azure Linuxは、 Microsoft Azure向けに構築されたオープンソースのLinuxディストリビューションであり、Fedora CoreOSに似ています。
参照
- コンテナ Linux
- コンテナオーケストレーション
- Flatpakパッケージ マネージャー
- Linux cgroups
- Linux 名前空間
- ハイパーバイザー
- ポータブルアプリケーション作成者
- オープンコンテナイニシアチブ
- サンドボックス(ソフトウェア開発)
- 分離カーネル
- サーバーレスコンピューティング
- スナップパッケージマネージャー
- ストレージハイパーバイザー
- 仮想プライベートサーバー(VPS)
- 仮想リソースの分割
注記
- ^ ルートユーザーはchrootから簡単に脱出できます。chrootはセキュリティメカニズムとして使用されることを想定されていませんでした。[9]
- ^ ab CFQスケジューラを使用すると、ゲストごとに個別のキューが存在します。
- ^ ab ネットワークは仮想化ではなく分離に基づいています。
- ^ ab コンテナ内で安全とみなされるユーザー権限は合計14個です。残りの権限は、コンテナ外のプロセスに干渉する恐れがあるため、コンテナ内のプロセスに付与することはできません。[13]
- ^コンテナごとのディスククォータは、 LVMを使用してコンテナごとに個別のパーティションを使用する場合、または基盤となるホストファイルシステムが btrfs である場合に可能になります。この場合、btrfs サブボリュームが自動的に使用されます。
- ^ Btrfs を使用する場合、I/O レート制限がサポートされます。
- ^ Linuxカーネル2.6.18-028stable021以降で利用可能。実装はCFQディスクI/Oスケジューラに基づいていますが、2レベルスキーマであるため、I/Oの優先順位はプロセスごとではなくコンテナごとです。[19]
- ^ ab 各コンテナには、独自の IP アドレス、ファイアウォール ルール、ルーティング テーブルなどを設定できます。ルート ベース、ブリッジ ベース、および実際のネットワーク デバイス ( NIC ) をコンテナに割り当てるという 3 つの異なるネットワーク スキームが可能です。
- ^ DockerコンテナはOpenVZコンテナ内で実行できます。[20]
- ^ 各コンテナは他のコンテナに影響を与えることなくルートアクセス権を持つことができる。[21]
- ^ 2008 年 1 月のバージョン 4.0 以降で利用可能。
- ^ DockerコンテナはVirtuozzoコンテナ内で実行できます。[23]
- ^ イルモスではそう[24]
- ^ 詳細については、Solaris ネットワーク仮想化とリソース制御を参照してください。
- ^ 最上位レベルが KVM ゾーン (illumos) または kz ゾーン (Oracle) の場合のみ。
- ^ Solaris 11.3 Beta 以降では、Solaris カーネル ゾーンでライブ マイグレーションが使用される場合があります。
- ^ コールドマイグレーション(シャットダウン-移動-再起動)が実装されています。
- ^ 非グローバルゾーンは機能制限アプローチによって他のゾーンに影響を与えないように制限されています。グローバルゾーンは非グローバルゾーンを管理することができます。[27]
- ^ 詳細については、FreeBSD jail のマニュアル ページの「allow.quotas」オプションと「Jails とファイル システム」セクションを確認してください。
- ^ TL 02から利用可能。[38]
参考文献
- ^ Hogg, Scott (2014-05-26). 「ソフトウェア コンテナー: ほとんどの人が認識しているよりも頻繁に使用されています」。Network World。Network world, Inc. 2015-07-09取得。Linux
OpenVZ、Linux-VServer、FreeBSD Jails、AIX Workload Partitions (WPAR)、HP-UX Containers (SRP)、Solaris Containers など、他の OS レベルの仮想化システムも多数あります。
- ^ Rami, Rosen. 「Linux コンテナの基礎となる名前空間と Cgroup」(PDF) 。2016 年8 月 18 日閲覧。
- ^ 「KubeArmor を使用して Amazon EKS で Bottlerocket のデプロイメントを安全に行う | コンテナ」。aws.amazon.com。2022 年 10 月 20 日。2023 年 6 月 20 日閲覧。
- ^ Korff, Yanek; Hope, Paco; Potter, Bruce (2005). Mastering FreeBSD and OpenBSD security. O'Reilly シリーズ. O'Reilly Media, Inc. p. 59. ISBN 0596006268。
- ^ Huang, D. (2015). 「ブロック I/O に OS レベルの仮想化を使用した経験」。第10 回並列データ ストレージ ワークショップの議事録。pp. 13–18。doi :10.1145/2834976.2834982。ISBN 9781450340083.S2CID 3867190 。
- ^ 「システム管理ガイド: Oracle Solaris コンテナ - リソース管理および Oracle Solaris ゾーン、第 16 章: Solaris ゾーンの概要」。Oracle Corporation . 2010 . 2014 年 9 月 2 日閲覧。
- ^ 「システム管理ガイド: Oracle Solaris コンテナ - リソース管理と Oracle Solaris ゾーン、第 31 章: ブランド ゾーンと Linux ブランド ゾーンについて」。Oracle Corporation . 2010 . 2014 年 9 月 2 日閲覧。
- ^ Bryan Cantrill (2014-09-28). 「夢は生きている! illumos カーネルで Linux コンテナーを実行する」. slideshare.net . 2014-10-10に閲覧。
- ^ 「3.5. プログラムの環境を制限する」。freebsd.org。
- ^ 「Docker が LXC をデフォルトの実行環境から削除」。InfoQ。
- ^ 「Windows に Docker デスクトップをインストールする | Docker ドキュメント」。Docker。2023年2 月 9 日。
- ^ 「Mac用Dockerデスクトップを使い始める」。Dockerドキュメント。2019年12月6日。
- ^ 「論文 - Linux-VServer」. linux-vserver.org .
- ^ ab Graber, Stéphane (2014 年 1 月 1 日). 「LXC 1.0: セキュリティ機能 [6/10]」. 2014 年2 月 12 日閲覧。LXC
はユーザー名前空間をサポートするようになりました。[...] LXC はもはや root として実行されていないため、攻撃者がコンテナーから脱出できたとしても、ホスト上の通常のユーザーと同じ権限を持っていることになります。
- ^ 「Sylabs が Singularity コンテナーを商用 HPC に導入 | トップ 500 スーパーコンピューター サイト」www.top500.org。
- ^ 「SIF — コンテナの格納」www.sylabs.io . 2018年3月14日。
- ^ Kurtzer, Gregory M.; Sochat, Vanessa; Bauer, Michael W. (2017年5月11日). 「Singularity: コンピューティングのモビリティのための科学的コンテナ」. PLOS ONE . 12 (5): e0177459. Bibcode :2017PLoSO..1277459K. doi : 10.1371/journal.pone.0177459 . PMC 5426675. PMID 28494014 .
- ^ Bronnikov, Sergey. 「OpenVZ wiki ページの比較」。OpenVZ Wiki。OpenVZ。2018年12月 28 日閲覧。
- ^ 「コンテナの I/O 優先度」。OpenVZ Virtuozzo Containers Wiki。
- ^ 「CT 内の Docker」。
- ^ 「コンテナ」。OpenVZ Virtuozzo Containers Wiki。
- ^ 「Virtuozzo の最初の公開プレリリース (当時の名称は ASPcomplete)」。
- ^ 「Parallels Virtuozzo が Docker のネイティブ サポートを提供するようになりました」。
- ^ Pijewski、Bill。「ZFS I/O スロットル」。
- ^ ネットワーク仮想化とリソース制御 (Crossbow) FAQ 2008-06-01 にWayback Machineでアーカイブ
- ^ 「Oracle® Solaris 11.2 でのネットワーク仮想化とネットワーク リソースの管理」。docs.oracle.com。
- ^ Oracle Solaris 11.1 管理、Oracle Solaris ゾーン、Oracle Solaris 10 ゾーンおよびリソース管理 E29024.pdf、356 ~ 360 ページ。アーカイブ内で入手可能。
- ^ 「あなたの熱意を抑えてください - パート 2: jail、ゾーン、OpenVZ、および LXC」。
jail は 2000 年に FreeBSD 4.0 で初めて導入されました。
- ^ 「階層的リソース制限 - FreeBSD Wiki」Wiki.freebsd.org. 2012-10-27 . 2014-01-15閲覧。
- ^ 「FreeBSD カーネルにクローン可能なネットワーク スタックを実装する」(PDF) . usenix.org. 2003-06-13.
- ^ 「FreeBSD 用 VPS」。2016 年 2 月 20 日閲覧。
- ^ 「[お知らせ] VPS // OS仮想化 // アルファリリース」 2012年8月31日. 2016年2月20日閲覧。
- ^ 「3.5. プログラムの環境を制限する」。Freebsd.org 。 2014年1月15日閲覧。
- ^ Matthew Dillon (2006). 「sys/vkernel.h」. BSD 相互参照. DragonFly BSD .
- ^ ab "vkd(4) — 仮想カーネルディスク"。DragonFly BSDは
ディスクイメージをコピーオンライトとして扱います。
- ^ ab Sascha Wildner (2007-01-08). 「vkernel、vcd、vkd、vke — 仮想カーネルアーキテクチャ」。DragonFly雑多な情報マニュアル。DragonFly BSD。
- 「vkernel、vcd、vkd、vke - 仮想カーネル アーキテクチャ」。DragonFly のその他の情報マニュアル。
- ^ 「vkernel、vcd、vkd、vke - 仮想カーネルアーキテクチャ」。DragonFlyオンラインマニュアルページ。DragonFly BSD。
- ^ 「IBM フィックスパック情報: WPAR ネットワーク分離 - 米国」ibm.com . 2011 年 7 月 21 日。
- ^ 「AIX 6.1 のライブ アプリケーション モビリティ」www.ibm.com。2008 年 6 月 3 日。
- ^ abcd "systemd-nspawn". www.freedesktop.org .
- ^ abcd 「2.3. Red Hat Enterprise Linux 7 のコントロールグループの変更」。Red Hat カスタマーポータル。
- ^ Polvi, Alex. 「CoreOS がコンテナ ランタイム rkt を構築中」。CoreOSブログ。2019 年 4 月 1 日時点のオリジナルよりアーカイブ。2019年3 月 12 日閲覧。
- ^ “LXD”. linuxcontainers.org . 2021年2月11日閲覧。
- ^ Podman と fuse-overlayfs を使用したルートレス コンテナ、CERN ワークショップ、2019-06-04
- ^ 「概要 — Charliecloud 0.25 ドキュメント」 。2020年10 月 4 日閲覧。
- ^ 「ホーム」. katacontainers.io .
- ^ 「Bottlerocket は、コンテナを実行するために特別に構築された Linux ベースのオペレーティング システムです」。
外部リンク
- 仮想化入門 2019-11-28にWayback Machineでアーカイブ
- 3つの異なる仮想化技術の簡単な紹介
- アプリケーション インフラストラクチャの仮想化とコンテナ化: 比較、2015 年 6 月 22 日、Mathijs Jeroen Scheepers 著
- コンテナと永続データ、LWN.net、2015 年 5 月 28 日、Josh Berkus 著
