Einführung in die LXD-Container von Ubuntu

Container sind aus vielen Gründen nützlich. Sie isolieren Apps vom Rest des Systems. Sie sind portabel und einfach zu klonen und/oder auf andere Betriebssysteme zu verschieben. Und im Falle von Linux funktionieren sie unter jeder Distribution auf dieselbe Weise, ohne dass Anpassungen erforderlich sind. Wenn Sie einen Container von RedHat nach Ubuntu verschieben müssen, sollte dies nur ein einfacher Kopiervorgang sein.

Docker ist eine beliebte Lösung, die dafür entwickelt wurde, eine einzelne Anwendung zu enthalten: zum Beispiel einen MySQL-Datenbankserver. LXD ist in einigen Aspekten ähnlich, ist jedoch dafür ausgelegt, ein gesamtes Betriebssystem zu enthalten. Dies macht es für einige Szenarien nützlich. Zum Beispiel können Sie einen LXD-Container erstellen, einen Datenbankserver und einen HTTP-Server installieren. Dann können Sie eine WordPress-Website darin erstellen. Sie können jetzt von Cloud zu Cloud wechseln, indem Sie einfach diesen LXD-Container dorthin verschieben, wo er benötigt wird, wenn Sie mit Ihrem vorherigen Anbieter unzufrieden sind. Und da es einfach ist, einen Container zu klonen, können Sie Ihre Website sogar bei mehreren Cloud-Anbietern hochladen, um ein redundantes, hochverfügbares Setup zu erstellen.

LXD virtualisiert keine Hardware wie QEMU oder VirtualBox, was bedeutet, dass es sehr schnell ist und eine nahezu native Ausführungsgeschwindigkeit bietet.

LXD installieren und konfigurieren

Öffnen Sie ein Terminal und installieren Sie LXD sowie die ZFS-Dienstprogramme, die Ihnen helfen, einige Operationen zu beschleunigen und Speicherplatz beim Arbeiten mit Containern zu sparen.

sudo apt install zfsutils-linux lxd

lxd-apt-install

Starten Sie die LXD-Konfiguration.

sudo lxd init

Drücken Sie ENTER, um die Standardwerte auszuwählen.

Für Größe in GB des neuen Loop-Geräts (mindestens 1 GB) [Standard=15 GB] können Sie einen anderen Wert wählen, z.B. “50 GB”, wenn Sie wissen, dass Sie viele Container erstellen werden.

lxd-init-questions

Finden und Starten eines LXD-Distributionsbilds

Um alle Ubuntu-Bilder aufzulisten:

lxc image list ubuntu: arch=amd64

lxd-ubuntu-images

Es wird viele Ergebnisse geben. Sie können arch=amd64 weglassen, wenn Sie Bilder für andere Plattformen benötigen, z.B. ARM-Prozessoren (Raspberry Pi-Geräte verwenden eine solche Architektur).

Im vorherigen Bild wurden die Ergebnisse (mit |head) limitiert, um die Lesbarkeit zu erleichtern. Der Fingerabdruck von Ubuntu 18.04 (84a71299044b) wurde hervorgehoben. Wenn Sie einen Container mit dieser Distribution starten möchten, wäre der Befehl:

lxc launch ubuntu:84a71299044b

Im Moment würde dies einen Fehler mit unzureichenden Berechtigungen zurückgeben. Sie müssen in der “lxd”-Gruppe sein. Ihr Benutzer wurde bereits zu dieser Gruppe hinzugefügt, aber um sie aktiv zu machen, müssen Sie sich abmelden und wieder anmelden. Wenn Sie das vermeiden möchten, verwenden Sie diesen Befehl und ersetzen “user” durch Ihren Benutzernamen:

execsu - user

lxd-user-active-groups

Jetzt funktionieren lxc-Befehle, ohne dass sudo erforderlich ist.

LXD-Container mit nicht-Ubuntu-Distributionen starten

Dieser Befehl zeigt Ihnen, welche anderen Distributionen verfügbar sind:

lxc image list images: arch=amd64

Um ein Bild zu starten, können Sie anstelle des Fingerabdrucks auch einen Aliasnamen verwenden, wenn Sie einen in dieser Liste verfügbar sehen.

lxc launch images:debian/9

lxd-launch-debian-9

Wenn Sie am Ende eine Zeichenfolge anhängen, können Sie einen Namen für Ihren Container wählen:

lxc launch images:debian/9 wordpress-site

LXD-Container verwalten

Um alle Container aufzulisten:

lxc list

lxd-lxc-list

Die Spalte “IPV4” ist besonders wichtig, wenn Sie einen Dienst auf dieser Instanz ausführen. Wenn zum Beispiel ein Apache-HTTP-Server auf der Instanz läuft, würde die Eingabe von „10.234.232.246“ im Browser die in dem Container gehostete Website anzeigen.

Um einen Container zu stoppen:

lxc stop name_of_container

Dies kann bei nicht-Ubuntu-Distributionen sehr lange dauern (oder fehlschlagen). Es ist besser, eine Shell zum Container zu erhalten, und einmal drinnen systemctl poweroff einzugeben, um ihn zu stoppen.

Wenn alles andere fehlschlägt, können Sie mit folgendem Befehl zwangsweise stoppen:

lxc stop name_of_container --force

Um ihn zu starten:

lxc start name_of_container

Um in Ihren Container zu gelangen:

lxc shell name_of_container

lxd-shell-debian

Sie können Programme mit „sudo apt install“ installieren und alles andere tun, was Sie auf einer normalen Linux-Distribution tun würden, z.B. einen Apache-Server konfigurieren. Wenn Sie den Container verlassen möchten, geben Sie einfach ein:

exit

Dateien zu/von LXD-Containern übertragen

Um eine Datei in Ihren Container hochzuladen:

lxc file push /path/to/local/file name_of_container/path/to/uploaded/file

Fügen Sie den Namen der zu erstellenden Datei hinzu, nicht nur das Verzeichnis, in das Sie sie hochladen möchten. Hier ein Beispiel:

lxc file push lxd-apt-install.png accurate-colt/var/www/website/upload.png

Um ein Verzeichnis anstelle einer Datei hochzuladen:

lxc file push /path/to/local/directory name_of_container/path/to/remote/directory --recursive--verbose

Beispiel:

lxc file push /bin accurate-colt/tmp --recursive--verbose

Um ein Verzeichnis von Ihrem Container auf Ihr Hauptbetriebssystem herunterzuladen:

lxc file pull name_of_container/path/to/remote/directory /path/to/local/directory --recursive--verbose

Beispiel:

lxc file pull accurate-colt/tmp /tmp --recursive--verbose

Fazit

Dies deckt die grundlegende Nutzung von LXD-Containern ab. Es gibt fortgeschrittenere Funktionen wie Snapshots und Rollbacks, das Festlegen von Limits für Ressourcen wie CPU und RAM, das Klonen von Containern usw. Diese könnten in einem zukünftigen Tutorial behandelt werden, wenn wir bemerken, dass die Leser an dem Thema interessiert sind.