Asiri - stock.adobe.com

Grundlagen für die Docker-Alternative Linux-Container

Als Alternative zur Bereitstellung von Containern eignen sich statt Docker auch Linux-Container (LXC), die über Proxmox bereitgestellt werden. Der Beitrag erklärt die Funktionsweise.

Bei dem Thema Container denken viele direkt an Kubernetes oder Docker. Die Alternative Linux-Container (LXC) verfügt aber über vergleichbare Funktionen wie Docker.

LXC ist eine Open-Source-Containerplattform. Sie verfügt über eigene Management-Tools und eine CLI (Command Line Interface). Bei vielen Distributionen kann LXC über die Paketverwaltung installiert werden. Auf Ubuntu beispielsweise startet man die Installation folgendermaßen:

sudo apt-get install lxc

Einsatz von LXC, LXD und LXCFS

Auch bei LXC sind die Prozesse vom Rest des Systems getrennt und somit portabel, genau wie bei Docker. Bei der Verwendung von LXC teilen sich die Container den Kernel mit dem Container-Host. Die verbleibenden Prozesse sind voneinander getrennt.

LXC kann wiederum mit LXD administriert 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 ebenfalls als Open-Source-Lösung unter der Apache-2-Lizenz frei verfügbar. Mittlerweile wird LXD von Canonical betrieben.

Seit der Version 4.x von LXC wird auch cgroup2 unterstützt. Damit können hierarchische Prozesse besser abgebildet werden. LXC kombiniert cgroups im Kernel zur Verwaltung von Ressourcen. Neben Containern kann LXD auch virtuelle Maschinen (VMs) unter Linux verwalten. Diese können parallel zu Containern verwendet werden. Um VMs mit LXD zu starten, verwendet man die Option --vm.

LXCFS ist das zu LXC und LXD gehörende Dateisystem, das auf FUSE basiert. In der aktuellen Version unterstützt LXCFS auch cgroup2. Für LXC, LXD und LXCFS gibt es derzeit in der Version LXCFS 6.0.1 mit Long Term Support (LTS) eine garantierte Unterstützung bis 2029.

Verständnis von privilegierten und nicht-privilegierten Containern

Wer auf LXC setzt, um Container unter Linux bereitzustellen, muss sich mit den verschiedenen Arten von Containern auseinandersetzen. Es gibt privilegierte und nicht-privilegierte Container. Der Typ wird bereits bei der Erstellung eines Containers festgelegt. Nicht-privilegierte Container sind zunächst sicherer als privilegierte Container, haben 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 hingegen erhält der Benutzer nur eine ID mit wenigen Rechten und die Berechtigungen sind vollständig getrennt. Der Container ist klarer vom System getrennt. Auf Ubuntu-Systemen erhält jeder neue Benutzer auf dem System eine Standardzuweisung von 65.536 Nutzeridentifikatoren und Gruppenidentifikatoren.

Privilegierte Container sind unkomplizierter, da die Rechtestruktur einfacher ist. Dafür können bei privilegierten Containern auch unerwünschte Aktionen oder Malware auf den Host gelangen, prinzipiell auch mit Root-Rechten. Das ist bei der Verwendung von nicht-privilegierten Containern nicht möglich. Allerdings sind nicht-privilegierte Container in ihrer Verwendung eingeschränkt. So ist es beispielsweise nicht möglich, die meisten Dateisysteme zu mounten oder Device-Nodes anzulegen. Operationen gegen eine externe Benutzer- oder Gruppen-ID sind gesperrt. Aus diesen Gründen funktionieren viele Templates nicht, wenn der Container unprivilegiert erstellt wird.

Eine detaillierte Beschreibung der Unterschiede findet sich im Blog eines der LXC-Entwickler.

Schnelle Erstellung von Linux-Containern

Kostenlose Distributionen wie Proxmox ermöglichen den parallelen Betrieb von virtuellen Servern und Containern auf einem gemeinsamen Host. Proxmox bietet eine webbasierte grafische Oberfläche für Container sowie Templates, mit denen Container schnell bereitgestellt werden können, zum Beispiel für den Betrieb von OpenVPN.

vereinfachte Containerverwaltung
Abbildung 1: Proxmox vereinfacht die Containerverwaltung durch seine grafische Oberfläche.

Mit Proxmox können LXC-Container in der Weboberfläche über Erstelle CT zur Verfügung gestellt werden. Die Templates stehen auf der Registerkarte Template zur Verfügung (Abbildung 1). Sie werden von Proxmox über den Datenspeicher durch Auswahl von Templates heruntergeladen. Die Vorlagen stehen dann bei der Erstellung von Containern zur Verfügung.

Vorlagen für LXC-Container
Abbildung 2: In Proxmox finden Sie Vorlagen für LXC-Container und können sie downloaden.

Wie Sie 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

Diese Syntax startet den Computer:

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.

LXC als Grundlage

LXC, LXD und das dazugehörige LXCFS bieten eine gute Grundlage, um schnell und einfach Container mit verschiedenen Linux-Distributionen bereitzustellen. Wer zusätzlich die Open-Source-Lösung Proxmox nutzt, kann LXC auch in einem Webinterface verwalten und die einzelnen Templates einfach herunterladen und daraus Container erstellen. Dafür sind weder Lizenzen noch Docker notwendig.

Erfahren Sie mehr über Server- und Desktop-Virtualisierung