LXC
# LXC

LXC (Linux Containers) ist ein Verfahren zur Containervirtualisierung auf Betriebssystemebene, das mehrere voneinander isoliert laufende Linux-Systeme auf einem einzigen Host ermöglicht.

## Funktionsweise

Im Gegensatz zu anderen Systemen realisiert LXC seine Virtualisierung nicht mittels virtueller Maschinen. Stattdessen erzeugt LXC eine virtuelle Umgebung, die zwar ihre eigenen Prozesse besitzt, doch für diese gemeinschaftlich den Kernel des Hostsystems nutzt.

LXC besteht aus einer Programmbibliothek, diversen APIs für Python, Lua und Go, Containervorlagen sowie Werkzeugen zur Kontrolle der Container. Jene verwendet neben Kernelnamensräumen weitere Funktionen des Linux-Kernels, wie etwa SELinux und cgroups.

Während die Kernelnamensräume die Prozesse von anderen abschotten (Prozesse außerhalb der Namensräume sind nicht sichtbar), sorgen die cgroups für eine Ressourcenverwaltung. Hierüber kann zum Beispiel die Speichergröße eingeschränkt, der Datendurchsatz im Netzwerk oder auf Festplatten begrenzt oder die Zahl der verfügbaren CPUs bestimmt werden.

LXC stellt eine erweiterte chroot-Umgebung zur Verfügung und lässt sich insofern mit FreeBSD-Jails und Linux-VServer vergleichen.

## Sicherheit

Ab Kernelversion 3.12 können Kernel-Namespaces für ipc, uts, mount, pid, network und user verwendet werden. Damit besteht ab LXC-Version 1.0 die Möglichkeit, einen Container unter einer anderen UID als der von root zu starten. Damit sind viele Sicherheitsprobleme behoben, insbesondere kann vom Container aus das Hostsystem nicht mehr verändert werden, wie zum Beispiel über das Schreiben in die Datei /proc/sysrq-trigger.

## Geschichte

Bereits 1979 gab es in UNIX V7 eine einfache Prozessisolation namens chroot. Im Jahr 2000 erschien die erste Containertechnik mit dem Namen FreeBSD Jail. Damit waren Ressourcen virtualisiert wie zum Beispiel separate Netzwerkschnittstellen mit separaten IP-Adressen. Im Jahr 2001 erschien unter dem Namen Vserver ein ähnliches Tool für Linux, das auf einem gepatchten Kernel basierte. Dieses wurde bis 2006 gepflegt. 2005 erschien OpenVZ, eine Open-Source Variante des kommerziellen Virtuozzo der Firma Parallels inc. das auch für die Betriebssysteme Apple und Windows verfügbar war. Ebenso 2005 erschien eine sehr ähnlich funktionierende Virtualisierung für Oracle Solaris. 2006 kam durch eine Initiative von Google eine Technik zur Ressourcenbegrenzung in den einzelnen virtuellen Instanzen dazu, die in den Linux-Kernel integriert wurde. Daraus entstand dann 2008 LXC. Neben der Kernel-Integration bietet es reichlich Schnittstellen für Programmiersprachen wie Python, Ruby, Java. Dies führte zu der großen Beliebtheit und dem Erfolg von LXC, aus dem anfangs auch das später kommerzielle System Docker entwickelt wurde. Auch das 2011 erschienene System Warden basierte anfänglich auf LXC. Die Entwicklung solcher Systeme war unter anderem durch die Interessen und Erfordernisse der Anbieter virtueller Cloud-Server getrieben.

