OSレベルの仮想化

OSレベルの仮想化（英:OS-level virtualization）とは、オペレーティングシステム（OS）の枠組みで、コンテナ（LXC、Solaris containers、Docker、Podman）、zones（Solaris containers）、virtual private servers（OpenVZ）、パーティション、仮想環境（VEs）、仮想カーネル（DragonFly BSD）、jails（FreeBSD jailまたはchroot jail）と呼ばれる、複数の分離したユーザー空間インスタンスをカーネルによって割り当てる。このようなインスタンスはその中で実行されているプログラムからの視点では実際のコンピュータのように見えることがある。通常のOS上で動作するコンピュータプログラムは、そのコンピュータのすべての資源（接続されているデバイス、ファイルやフォルダ、ネットワーク共有、CPU性能、定量化できるハードウェア能力）を見ることができる。しかし、コンテナ内で動作するプログラムは、コンテナの内部とコンテナに割り当てられたデバイスしか見ることができない。 Unix系OSではこの機能は現在実行中のプロセスとその子プロセスの見かけ上のルートフォルダを変更する、標準的なchrootメカニズムの高度な実装と見なすことができる。カーネルはしばしばアイソレーションメカニズムに加えて、あるコンテナの活動が他のコンテナに与える影響を制限するための資源管理機能を提供する。Linuxコンテナは、Linuxカーネルが提供する仮想化、アイソレーション、資源管理のメカニズム、特にLinux名前空間（英語版）と cgroupsをベースにしている。 コンテナという用語は、OSレベルの仮想化システムを指すのが一般的だが、MicrosoftのHyper-Vコンテナのように、ホストOSとさまざまなレベルで協調して動作する完全な仮想マシン環境を指すのにも多義的に使用されることがある。 上記以外のLinuxコンテナには以下のようなものがある。 LXD, Canonicalによって開発されたLXCの代替ラッパー。 Podman: Dockerのドロップイン代替品 Charliecloud: HPCシステムで使用されるコンテナ・ツールの一式 Kata Containers MicroVMプラットフォーム Bottlerocketは、仮想マシンやベアメタルホスト上でコンテナを実行するためにAmazon Web Servicesが専用に開発したLinuxベースのオープンソース・オペレーティング・システムである。 CBL-Marinerは、Microsoft Azureが開発したオープンソースのLinuxディストリビューションで、Fedora CoreOSに類似している。 コンテナオーケストレーション Linux名前空間（英語版） Linuxのcgroups サンドボックス (ソフトウェア開発) Container Linux ハイパーバイザ ポータブルアプリケーションクリエイター Open Container Initiative 分離カーネル サーバーレス・コンピューティング Snapパッケージ管理システム ストレージハイパーバイザー バーチャル・プライベート・サーバ 仮想リソースパーティショニング ^ Root user can easily escape from chroot. Chroot was never supposed to be used as a security mechanism. ^ a b Using the CFQ scheduler, there is a separate queue per guest. ^ a b Networking is based on isolation, not virtualization. ^ a b A total of 14 user capabilities are considered safe within a container. The rest may cannot be granted to processes within that container without allowing that process to potentially interfere with things outside that container. ^ Disk quotas per container are possible when using separate partitions for each container with the help of LVM, or when the underlying host filesystem is btrfs, in which case btrfs subvolumes are automatically used. ^ I/O rate limiting is supported when using Btrfs. ^ Available since Linux kernel 2.6.18-028stable021. Implementation is based on CFQ disk I/O scheduler, but it is a two-level schema, so I/O priority is not per-process, but rather per-container. ^ a b Each container can have its own IP addresses, firewall rules, routing tables and so on. Three different networking schemes are possible: route-based, bridge-based, and assigning a real network device (NIC) to a container. ^ Docker containers can run inside OpenVZ containers. ^ Each container may have root access without possibly affecting other containers. ^ Available since version 4.0, January 2008. ^ Docker containers can run inside Virtuozzo containers. ^ Yes with illumos ^ See OpenSolaris Network Virtualization and Resource Control for more details. ^ Only when top level is a KVM zone (illumos) or a kz zone (Oracle). ^ Starting in Solaris 11.3 Beta, Solaris Kernel Zones may use live migration. ^ Cold migration (shutdown-move-restart) is implemented. ^ Non-global zones are restricted so they may not affect other zones via a capability-limiting approach. The global zone may administer the non-global zones. ^ Check the "allow.quotas" option and the "Jails and File Systems" section on the FreeBSD jail man page for details. ^ Available since TL 02. ^ Hogg, Scott (2014年5月26日). “Software Containers: Used More Frequently than Most Realize”. Network World, Inc. http://www.networkworld.com/article/2226996/cisco-subnet/software-containers--used-more-frequently-than-most-realize.html 2015年7月9日閲覧. "There are many other OS-level virtualization systems such as: Linux OpenVZ, Linux-VServer, FreeBSD Jails, AIX Workload Partitions (WPARs), HP-UX Containers (SRP), Solaris Containers, among others."  ^ Rami, Rosen. “Namespaces and Cgroups, the basis of Linux Containers”. http://www.netdevconf.org/1.1/proceedings/slides/rosen-namespaces-cgroups-lxc.pdf 18 August 2016閲覧。  ^ 3.5. Limiting your program's environment freebsd.org. ^ “Docker drops LXC as default execution environment”. InfoQ. http://www.infoq.com/news/2014/03/docker_0_9  ^ “Docker comes to FreeBSD”. (July 9, 2015). https://www.freebsdnews.com/2015/07/09/docker-freebsd/  ^ “Get started with Docker for Windows”. Docker. (10 September 2021). https://docs.docker.com/docker-for-windows/  ^ “Get started with Docker Desktop for Mac”. (December 6, 2019). https://docs.docker.com/docker-for-mac/  ^ “Paper - Linux-VServer”. http://linux-vserver.org/Paper#Secure_Capabilities  ^ a b Graber, Stéphane (1 January 2014). “LXC 1.0: Security features [6/10”]. https://www.stgraber.org/2014/01/01/lxc-1-0-security-features/ 12 February 2014閲覧. "LXC now has support for user namespaces. [...] LXC is no longer running as root so even if an attacker manages to escape the container, he'd find himself having the privileges of a regular user on the host"  ^ Sylabs Brings Singularity Containers into Commercial HPC | TOP500 Supercomputer Sites www.top500.org. ^ “Redirecting…”. (14 March 2018). https://www.sylabs.io/2018/03/sif-containing-your-containers/  ^ Kurtzer, Gregory M.; Sochat, Vanessa; Bauer, Michael W. (May 11, 2017). “Singularity: Scientific containers for mobility of compute”. PLOS ONE 12 (5): e0177459. Bibcode: 2017PLoSO..1277459K. doi:10.1371/journal.pone.0177459. PMC 5426675. PMID 28494014. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5426675/.  ^ Bronnikov, Sergey. “Comparison on OpenVZ wiki page”. OpenVZ. https://wiki.openvz.org/Comparison 28 December 2018閲覧。  ^ “I/O priorities for containers”. OpenVZ Virtuozzo Containers Wiki. http://wiki.openvz.org/I/O_priorities_for_VE  ^ “Docker inside CT”. https://openvz.org/Docker_inside_CT  ^ “Container”. OpenVZ Virtuozzo Containers Wiki. http://wiki.openvz.org/Container  ^ “Initial public prerelease of Virtuozzo (named ASPcomplete at that time)”. http://www.paul.sladen.org/vserver/aspcomplete/2000-08-25/ve-0.4.2-for-2.4.0-test6.diff.gz  ^ “Parallels Virtuozzo Now Provides Native Support for Docker”. http://www.odin.com/news/pr/release/article/parallels-virtuozzo-now-provides-native-support-for-docker/  ^ Pijewski, Bill. “Our ZFS I/O Throttle”. http://dtrace.org/blogs/wdp/2011/03/our-zfs-io-throttle/  ^ Network Virtualization and Resource Control (Crossbow) FAQ Archived 2008-06-01 at the Wayback Machine. ^ “Managing Network Virtualization and Network Resources in Oracle® Solaris 11.2”. https://docs.oracle.com/cd/E36784_01/html/E36813/index.html  ^ Oracle Solaris 11.1 Administration, Oracle Solaris Zones, Oracle Solaris 10 Zones and Resource Management E29024.pdf, pp. 356–360. Available within an archive. ^ “Contain your enthusiasm - Part Two: Jails, Zones, OpenVZ, and LXC”. http://www.cybera.ca/news-and-events/tech-radar/contain-your-enthusiasm-part-two-jails-zones-openvz-and-lxc/. "Jails were first introduced in FreeBSD 4.0 in 2000"  ^ “Hierarchical_Resource_Limits - FreeBSD Wiki”. Wiki.freebsd.org. (2012年10月27日). http://wiki.freebsd.org/Hierarchical_Resource_Limits 2014年1月15日閲覧。  ^ “Implementing a Clonable Network Stack in the FreeBSD Kernel”. usenix.org. (2003年6月13日). http://static.usenix.org/publications/library/proceedings/usenix03/tech/freenix03/full_papers/zec/zec.pdf  ^ “VPS for FreeBSD”. http://www.7he.at/freebsd/vps/ 2016年2月20日閲覧。  ^ “[Announcement VPS // OS Virtualization // alpha release”]. https://forums.freebsd.org/threads/34284/ 2016年2月20日閲覧。  ^ “3.5. Limiting your program's environment”. Freebsd.org. http://www.freebsd.org/doc/en/books/developers-handbook/secure-chroot.html 2014年1月15日閲覧。  ^ Matthew Dillon (2006年). “sys/vkernel.h”. DragonFly BSD. http://bxr.su/d/sys/sys/vkernel.h  ^ a b “vkd(4) — Virtual Kernel Disc”. DragonFly BSD. http://mdoc.su/d/vkd.4. ""treats the disk image as copy-on-write.""  ^ a b Sascha Wildner (2007年1月8日). “vkernel, vcd, vkd, vke — virtual kernel architecture”. DragonFly Miscellaneous Information Manual (DragonFly BSD). http://bxr.su/d/share/man/man7/vkernel.7  “vkernel, vcd, vkd, vke - virtual kernel architecture”. DragonFly Miscellaneous Information Manual. http://mdoc.su/d/vkernel.7  ^ “vke(4) — Virtual Kernel Ethernet”. DragonFly BSD. http://mdoc.su/d/vke.4  ^ “IBM Fix pack information for: WPAR Network Isolation - United States”. ibm.com. (21 July 2011). http://www-01.ibm.com/support/docview.wss?uid=isg1fixinfo109461  ^ “Live Application Mobility in AIX 6.1”. (June 3, 2008). http://www.ibm.com/developerworks/aix/library/au-aix61mobility/index.html  ^ a b c d “systemd-nspawn”. https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html#--property=  ^ a b c d “2.3. Modifying Control Groups Red Hat Enterprise Linux 7”. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-modifying_control_groups  ^ Polvi, Alex. “CoreOS is building a container runtime, rkt”. オリジナルの2019年4月1日時点におけるアーカイブ。. https://web.archive.org/web/20190401013449/https://coreos.com/blog/rocket.html 12 March 2019閲覧。  ^ “LXD”. https://linuxcontainers.org/lxd/ 2021年2月11日閲覧。  ^ Rootless containers with Podman and fuse-overlayfs, CERN Workshop, 2019-06-04 ^ “Overview — Charliecloud 0.25 documentation”. https://hpc.github.io/charliecloud/ 4 October 2020閲覧。  ^ Home - katacontainers.io. ^ Bottlerocket is a Linux-based operating system purpose-built to run containers