zhu difeng - Fotolia
LXC: Grundlagen für die Docker-Alternative
Linux-Container (LXC) sind eine echte Alternative zur Bereitstellung von Containern mit Docker. Dieser Artikel erklärt wie es funktioniert und zeigt die Bereitstellung mit Proxmox.
Bei Containern denken viele Profis automatisch an Docker und Kubernetes. Es gibt mit Linux-Containern (LXC) aber auch eine weitere Alternative, die über ähnliche Funktionen wie Docker verfügt.
LXC ist eine Open-Source-Containerplattform. Sie verfügt über eigene Tools zur Verwaltung und eine CLI (Command Line Interface, Kommandozeile). Auf vielen Distributionen kann LXC über die Paketverwaltung installiert werden. Auf Ubuntu, beispielsweise, startet man die Installation mit:
sudo apt-get install lxc
LXC, LXD und LXCFS im Einsatz
Auch bei LXC werden die Prozesse vom Rest des Systems getrennt und sind daher portierbar, genauso wie mit Docker. Beim Einsatz von LXC teilen sich die Container den Kernel mit dem Container-Host. Die restlichen Prozesse sind voneinander getrennt.
LXC kann wiederum mit LXD verwaltet werden. Dabei handelt es sich um einen Hypervisor-Aufsatz für LXC, der eng mit LXD verbunden ist, und mit Lösungen wie OpenStack zusammenarbeitet. LXD ist in Go geschrieben und steht ebenfalls kostenlos als Open-Source-Lösung unter der Apache-2-Lizenz zur Verfügung.
Seit Version 4.x von LXC wird auch cgroup2 unterstützt. Damit lassen sich hierarchische Prozesse besser abbilden. LXC kombiniert cgroups im Kernel für die Verwaltung der Ressourcen. Neben Containern kann LXD übrigens auch virtuelle Maschinen (VMs) in Linux verwalten. Diese lassen sich parallel zu Containern einsetzen. Zum Starten von VMs mit LXD verwendet man die Option --vm.
LXCFS ist das zu LXC und LXD gehörende Dateisystem auf Basis von FUSE. In der aktuellen Version unterstützt auch LXCFS cgroup2. Für LXC, LXD und LXCFS gibt es aktuell in der Version mit Long Term Support (LTS) garantierte Unterstützung bis 2025.
Priviligierte und nicht-priviligierte Container verstehen
Wer auf LXC setzt, um Container in Linux bereitzustellen, muss sich mit den unterschiedlichen Containerarten auseinandersetzen. Es gib privilegierte und nicht-privilegierte Container. Bereits beim Erstellen eines Containers wird der Typ festgelegt. Nicht-privilegierte Container sind zunächst sicherer als privilegierte Container, haben dafür aber weniger Rechte. Nicht jede Anwendung ist für den Betrieb in einem nicht-privilegierten Container geeignet.
Bei nicht privilegierten Containern wird die ID des angemeldeten Benutzers für den Host maskiert. Dadurch kann ein Benutzer ohne Root-Rechte einen nicht-privilegierten Container erstellen, erhält aber innerhalb des Containers Root-Rechte. Auf dem Host erhält der Benutzer hingegen nur eine ID mit weniger Rechten und die Berechtigungen sind komplett voneinander getrennt. Der Container wird deutlicher vom System getrennt. Auf Ubuntu-Systemen wird jedem neuen Benutzer auf dem System eine Standardzuweisung aus 65.536 Nutzeridentifikatoren und Gruppenidentifikatoren zugewiesen.
Privilegierte Container sind unkomplizierter, da die Rechtestruktur einfacher ist. Dafür können bei privilegierten Containern auch nicht erwünschte Aktionen oder Malware zum Host durchdringen, grundsätzlich auch mit Root-Rechten. Das ist beim Einsatz von nicht privilegierten Containern nicht möglich. Nicht-privilegierte Container sind beim Einsatz aber eingeschränkt. Es ist zum Beispiel nicht möglich die meisten Dateisysteme zu mounten oder Geräteknoten zu erstellen. Operation gegen eine Nutzer- oder Gruppen-ID außerhalb sind gesperrt. Aus diesen Gründen funktionieren viele Vorlagen nicht, wenn der Container nicht-privilegiert erstellt wird.
Eine ausführliche Beschreibung der Unterschiede ist auf dem Blog eines der LXC-Entwickler zu finden.
Linux-Container schnell erstellen
Kostenlose Distributionen, wie zum Beispiel Proxmox erlauben den parallelen Betrieb von virtuellen Servern und Containern auf einem gemeinsamen Host. Proxmox stellt eine webbasierte, grafische Oberfläche für Container zur Verfügung, sowie Vorlagen, mit denen sich schnell Container bereitstellen lassen, zum Beispiel für den Betrieb von OpenVPN.
Mit Proxmox lassen sich LXC-Container in der Weboberfläche über Erstelle CT zur Verfügung stellen. Die Vorlagen sind auf der Registerkarte Template verfügbar (Abbildung 1). Man lädt sie bei Proxmox über den Datenspeicher durch Auswahl von Templates herunter. Die Templates stehen anschließend bei der Erstellung von Containern zur Verfügung.
Container im Terminal erstellen und verwalten
Container können Sie in Linux-Distributionen auch im Terminal erstellen und Vorlagen herunterladen. Container werden nach der folgenden Syntax erstellt:
lxc-create -t download -n my-container
Folgende Syntax startet den Container:
lxc-start -n my-container -d
Den Status des Containers können Anwender über das Terminal überprüfen:
lxc-info -n my-container
lxc-ls -f
Folgender Befehl wechselt in eine Shell im Container:
lxc-attach -n my-container
Privilegierte Container und die zur Verfügung stehenden Vorlagen erstellt man mit folgendem Befehl:
sudo lxc-create -t download -n privileged-container
Anschließend kann man Distribution, Release und Architektur auswählen. Danach steht das Image zur Verfügung.
Fazit
LXC, LXD und das dazugehörige LXCFS bieten eine gute Grundlage, um Container schnell und unkompliziert mit verschiedenen Linux-Distributionen bereitzustellen. Wer sich die Open Source-Lösung Proxmox dazu nimmt, kann LXC auch in einer Weboberfläche verwalten und die einzelnen Templates einfach herunterladen und aus ihnen Container erstellen. Dazu sind keine Lizenzen und auch kein Docker notwendig.