LXC dient als Kommandozeilenmanager für LXC-Container, ist jedoch kompliziert zu bedienen. Die Weboberfläche LXD-UI erleichtert das Setup.
Bei LXC (Linux Containers) handelt es sich um ein Verfahren zur Virtualisierung auf Betriebssystemebene mit Containern, die voneinander isoliert auf einem Linux-System laufen. Das System, das die Container bereitstellt, bezeichnet man als Host oder Wirt. Die in den Containern betriebenen Systeme nennt man Guests beziehungsweise Gäste.
Alle Guests verwenden dabei den Kernel des Hosts, wodurch LXC sehr effizient arbeitet. Andererseits lassen sich auf diese Weise nur Systeme virtualisieren, die mit dem entsprechenden Kernel zusammenarbeiten. Es ist also nicht möglich, ein Windows in einem LXC zu starten. Das Verwalten der Linux-Container erfolgt komplett auf der Kommandozeile.
Um die Komplexität von LXC in den Griff zu bekommen, wurde der Container-Manager LXD entwickelt. Er setzt auf den LXC-Komponenten auf und erweitert sie um einfache Tools zur Administration, allerdings ebenfalls für die Kommandozeile. An dieser Stelle kommt LXD-UI [1] ins Spiel, ein leicht zu bedienendes grafisches Web-Frontend [2], mit dem sich schnell und unkompliziert LXC-Container erstellen und verwalten lassen.
Darüber hinaus gestattet es die Oberfläche, das komplette LXD-System zu konfigurieren, inklusive virtueller Netzwerke, Speicher-Pools und Standardeinstellungen für die Container. Unter dem Strich vereinfacht LXD UI die Arbeit mit Linux-Containern erheblich.
Installation
Die Installation von LXD samt Web-UI bringt auf verschiedenen Rechnern einige unerwartete Tücken mit sich. Interessanterweise lief die Software auf dem Ubuntu Desktop 22.04.3 vollkommen reibungslos. Wir beschreiben hier zuerst, wie Sie die Installation auf einem Strato-V-Server [3] bewerkstelligen. Anschließend zeigen wir die Installation auf lokaler Hardware mit einem Ubuntu 22.04.3 Server als Betriebssystem.
Um eine saubere Ausgangslage zu schaffen, installierten wir zunächst über Stratos Web-Interface den V-Server mit Ubuntu 22.04 neu. Nach der Installation verbanden wir uns via SSH mit dem Server.
Strato-Server verwenden in ihrer Systemkonfiguration eine viel zu niedrige Anzahl an Tasks. Um das zu ändern, müssen Sie in der Datei /etc/systemd/system.conf den Parameter DefaultTasksMax einkommentieren und auf einen Wert von 16547 setzen (DefaultTasksMax=16547). Nach dem Speichern der Änderung laden Sie den Dienst mit sudo systemctl daemon-reload neu. Ohne diese Änderung werden Sie mit Ihrem V-Server generell keine Freude haben.
Mit den Kommandos aus Listing 1 richten Sie LXD als Snap-Image auf dem Server ein. Nach Abschluss der Installation erreichen Sie die Web-GUI über die URL Abbildung 1).
Listing 1
LXD auf einem Strato-V-Server
#### System auf den aktuellen Stand bringen # apt update # apt upgrade #### Snap installieren # apt install snapd #### LXD installieren # snap install lxd --channel=latest/stable #### GUI einschalten # snap set lxd ui.enable=true #### LXD neu starten # snap restart --reload lxd #### HTTPS-Port für die GUI setzen # lxc config set core.https_address :8443

Abbildung 1: Um eine sichere Kommunikation zu gewährleisten, generieren Sie zunächst ein Zertifikat für Server und Webbrowser.
Erste Schritte
In der Oberfläche angelangt, erstellen Sie zunächst ein neues Zertifikat, das die Verbindung künftig absichert. Folgen Sie danach den Installationsanweisungen auf der Webseite. Sie führen unter anderem folgendes Kommando auf:
$ lxc config trust add Downloads/lxd-ui.crt
Hier müssen Sie darauf achten, dass der Hostname mit in den Zertifikatsnamen eingebaut ist und sich das Kommando deswegen nicht eins zu eins aus der Anleitung übertragen lässt.
Nach der Installation des Zertifikats im Webbrowser und auf dem Server kommunizieren beide zukünftig sicher. Nur Browser, deren Zertifikat zu dem des Servers passt, können jetzt noch auf die GUI zugreifen.
Mit einem Klick auf Create Instance erstellen Sie den ersten Container (Abbildung 2). Geben Sie ihm einen Namen und wählen Sie danach über Browse images ein Image aus (Abbildung 3). Damit der Container läuft, müssen Sie ihm noch Ressourcen zuordnen. Klicken Sie dazu auf Advanced | Disk device und wählen Sie den Pool default aus. Weisen Sie dem Container den gewünschten Plattenplatz zu und legen Sie unter Advanced | Resource limits den Hauptspeicher und die Anzahl der CPU-Kerne fest.
Ein Klick auf Create and Start richtet den Container ein und startet ihn. Sie können sich jetzt über Instances | <Container-Name> | Terminal mit dem Container verbinden und darauf arbeiten (Abbildung 4).

Abbildung 4: Nach dem Erstellen genügen wenige Klicks, um sich via Terminal am neuen System anzumelden.
Beim Erstellen von Containern arbeitet das grafische LXD-Frontend mit unterschiedlichen Profilen, deren Standardwerte Sie unter Profiles festlegen. Das spart eine Menge Arbeit, da Sie nicht mehr so viele Werte beim Erstellen eines Containers eingeben müssen.
Netzwerkanbindung
Aktuell fehlt unserem Container noch eine Netzwerkanbindung. Um diese einzurichten, müssen Sie zunächst ein neues Netzwerk anlegen. Normalerweise wird das bei der Installation von LXD automatisch erledigt, klappt aber im Test auf dem Strato-Server scheinbar nicht. Das könnte daran liegen, dass der V-Server selbst schon ein virtuelles Netzwerk-Interface besitzt. Um ein neues virtuelles Netzwerk für die Container anzulegen, wechseln Sie zu Networks | Create (Abbildung 5). Dort geben Sie die folgenden Parameter ein und erstellen ein Netzwerk:
- Type:
bridge (standard) - Name:
lxdbr0 - Ipv4 Address:
10.9.173.1/24 - Ipv6 Address:
fd42:7b3f:d2be:70c::1/64

Abbildung 5: Um den Container mit einer Netzwerkverbindung auszustatten, müssen Sie zunächst ein virtuelles Netzwerk erstellen.
Um das Netzwerk dem Container zuzuweisen, stoppen Sie ihn, wechseln in den Einstellungen zu Instances | <Container-Name> | Configuration | Advanced | Network devices und fügen das Netzwerk einem Interface hinzu (Abbildung 6). Anschließend starten Sie den Container wieder.
Im jetzigen Zustand können nur die Container innerhalb des virtuellen Netzwerks miteinander kommunizieren, es fehlt ein Zugang ins Internet. Um die Container via NAT damit zu verbinden, benötigen Sie auf dem Host-System eine zusätzliche Firewall-Regel (Listing 2, erste Zeile). Um den Port eines Containers auf der IP-Adresse des Hosts von außen erreichbar zu machen, müssen Sie eine Port-Weiterleitung auf dem Host einrichten (Listing 2, zweite Zeile).
Um zu prüfen, ob die Regeln wie gewünscht funktionieren, verwenden Sie das Kommando aus der letzten Zeile von Listing 2. Beachten Sie, dass das System die Firewall-Regeln bei einem Reboot löscht. Um sie permanent einzurichten, folgen Sie der Anleitung am Ende des Iptables-Tutorials [4] von Ubuntuusers.de.
Listing 2
Iptables-Regeln
# iptables -t nat -A POSTROUTING -o venet0 -j MASQUERAD # iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <I>Container-IP<I>:80 # iptables -t nat -L -v -n
Lokales System
Bei der im Test verwendeten Hardware handelte es sich um einen etwas älteren Raspberry Pi mit 8 GByte RAM. Im Prinzip spielt die eingesetzte Hardware aber lediglich eine untergeordnete Rolle; wichtig ist nur, dass Sie nicht direkt in Ressourcenengpässe geraten.
Als Betriebssystem für unseren Host verwendeten wir Ubuntu 22.04.3 Server [5]. Die Installation bringt LXD bereits mit, allerdings in einer veralteten Version ohne die Web-GUI. Es bleibt also nichts anderes übrig, als das vorhandene LXD zu löschen und das aktuelle Release zu installieren. Zum Testzeitpunkt war das Version 5.19 aus dem Snap Store (Listing 3).
Wie auf dem V-Server gilt es, zunächst einmal das Zertifikat für die Web-GUI zu installieren. Dabei fällt auf, dass im Profil default Werte hinterlegt sind und man ohne zusätzliche Parameter für Speicher und CPU direkt Container erstellen kann. Auch die im V-Server manuell erstellte Netzwerkbrücke existiert bereit. Zu guter Letzt ist sogar eine Firewall-Regel für den Internet-Zugriff der Container aktiv.
Listing 3
Neues LXD installieren
#### alte LXD-Version deinstallieren $ sudo snap remove lxd #### neue LXD-Version installieren $ sudo snap install lxd --channel=latest/stable #### GUI einschalten $ sudo snap set lxd ui.enable=true #### LXD neu starten $ sudo snap restart --reload lxd #### HTTPS-Port für die GUI setzen $ sudo lxc config set core.https_address :8443
Fazit
Steht die LXD-Umgebung, lässt sich mit LXD-UI mit wenigen Klicks ein LXC-Container erstellen und verwalten. Das Setup läuft trotz identischem Snap-Package auf unterschiedlichen Systemen stets ein wenig anders ab. Interessant ist auch, dass gerade der V-Server so viele zusätzliche Handgriffe erfordert, bis alles rund läuft.
Alles in allem bietet LXD-UI einen guten Einstiegspunkt für alle, die sich etwas intensiver mit Linux-Containern beschäftigen möchten. Sie erstellen damit im Handumdrehen Container, ohne sich mit den teilweise doch recht komplexen LXC-Kommandos auseinandersetzen zu müssen. (tle/jlu)
Der Autor
Martin Mohr hat die komplette Entwicklung der modernen Computertechnik live miterlebt. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte seine alte Liebe zur Elektronik wieder.
Infos
-
Canonical-Blog zu LXD-UI: https://ubuntu.com/blog/lxd_ui
-
Strato-V-Server: https://www.strato.de/server/linux-vserver/
-
Iptables-Anleitung: https://wiki.ubuntuusers.de/iptables/
-
Ubuntu Server herunterladen: https://ubuntu.com/download/server








