Empfohlen, 2024

Tipp Der Redaktion

So führen Sie mehrere Distros gleichzeitig mit Linux-Containern aus

Linux Container (LXC) sind eine leichtgewichtige Virtualisierungstechnologie, die vielfältig eingesetzt werden kann. Es ist Teil des Linux-Kernels und ermöglicht die Emulation eines oder mehrerer Linux-Distributionen auf einem einzelnen Linux-Host. Stellen Sie sich dies als Mittelweg zwischen einer Chroot-Technologie und vollständigen Virtualisierungstechnologien wie VirtualBox, KVM oder Xen vor. Eine ähnliche Technologie, die in der BSD-Welt vorhanden ist, sind FreeBSD-Jails.

Als Beispiel ist der Computer, auf dem ich schreibe, ein Laptop mit Linux Mint 18, der von einem Intel Atom-Prozessor angetrieben wird, und verfügt über magere 2 GB RAM. Ich führe jedoch drei Linux-Container aus, von denen jeder eine Instanz des Apache-Webservers ausführt, ohne dass dies einen großen Leistungsabfall bedeutet. Dies ist bei einer herkömmlichen virtuellen Maschine wie VirtualBox undenkbar. Wenn Sie also mehrere Distributionen auf Ihrem Linux-System ausführen möchten, sollten Linux-Container die Aufgabe für Sie erledigen.

Linux-Container installieren und konfigurieren

Wir richten LXC unter Linux Mint 18 64-Bit ein. Die hier bereitgestellten Installationsanweisungen funktionieren auch unter Ubuntu 16.04 und höher unverändert. Wenn Sie eine andere Distribution verwenden, schlagen Sie in der offiziellen Dokumentation Ihrer Distribution nach, wenn etwas nicht wie erwartet funktioniert. Es wird auch vorausgesetzt, dass Sie mit der Befehlszeile und der allgemeinen Fehlerbehebung vertraut sind.

Voraussetzungen

Hier sind einige Dinge, die Sie einrichten sollten, um mehrere Distros zu verwenden:

1. Installieren Sie LXC und andere vorausgesetzte Software mit:

[sourcecode] sudo apt install lxc lxc-vorlagen uidmap [/ sourcecode]

2. Nun müssen Sie Ihr Profil konfigurieren . Geben Sie die folgenden Befehle ein, um es einzurichten:

[Quellcode] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; amp; gt; & amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.type = veth" & amp; amp; gt; & amp; amp; gt; ~ / .config / lxc / default.conf
echo "lxc.network.link = lxcbr0" & amp; amp; gt; & amp; amp; gt; ~ / .config / lxc / default.conf
echo "$ USER veth lxcbr0 2" | Sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. Dann müssen Sie die Benutzerberechtigungen wie folgt einrichten :

[Quellcode] sudo usermod –add-subuids 100000-165536 $ USER
sudo usermod –add-subgids 100000-165536 $ USER

sudo cgm erstellt alle Benutzer
sudo cgm chown alle Benutzer $ (id -u) $ (id -g)
cgm movepid alle Benutzer $$ [/ sourcecode]

Einrichten Ihres Containers

Nachdem Sie LXC Container zusammen mit anderer vorausgesetzter Software installiert haben, können Sie den Container folgendermaßen einrichten:

1. In diesem Beispiel richten wir einen Ubuntu-Container mit dem Namen ubu1 . Führen Sie dazu den folgenden Befehl aus:

[Quellcode] lxc-create - Vorlagen-Download –name ubu1 [/ Quellcode]

2. Hier weist der Parameter -template an, dass lxc ein vorkonfiguriertes Bild aus dem Internet herunterladen soll, während der Parameter –name den Namen des Containers ubu1 - ubu1 in diesem Fall. Sie können jeden beliebigen Namen verwenden.

3. Sie sehen jetzt eine Liste der unterstützten Distro-Bilder :

4. Geben Sie die Details der Distribution ein, die Sie installieren möchten. Ich werde die 64-Bit-Version von Ubuntu 16.04 (Codename xenial) hier installieren:

5. Wenn Sie das Image nicht interaktiv installieren möchten, erzielen Sie mit dem folgenden Befehl dasselbe Ergebnis wie oben:

[sourcecode] lxc-create -t ​​download -n ubu1 - –dist ubuntu –release xenial –arch amd64 [/ sourcecode]

6. LXC lädt jetzt ein minimales Ubuntu-Xenia-Image auf Ihr Hostsystem herunter und installiert es. Der Download und die Installation können je nach Internetverbindung und Geschwindigkeit Ihres PCs einige Zeit in Anspruch nehmen. Nach der Installation wird ein Bildschirm wie folgt angezeigt:

Sie können jetzt Ihren neu eingerichteten Ubuntu-Container verwenden.

Verwenden mehrerer Distros mit Linux-Containern

Den Container starten

Starten Sie Ihren Container mit dem Befehl lxc-start :

[Quellcode] lxc-start -n ubu1 -d [/ Quellcode]

Der Parameter -n gibt hier den Namen des Containers an, den Sie starten möchten (in diesem Fall ubu1 ), und der Parameter -d ubu1, dass er im Hintergrund ausgeführt wird .

Sie können den Start des Containers mit dem Befehl lxc-ls überprüfen:

[Quellcode] lxc-ls -f [/ Quellcode]

Der Parameter -f ermöglicht ein ausgefallenes Reporting. Hier sehen Sie, dass ich zwei Container habe - einen Debian (gestoppt) und einen Ubuntu (laufend).

Zugriff auf und Verwendung Ihres Containers

Sie können mit dem Befehl lxc-attach die Konsole des Containers lxc-attach :

[Quellcode] lxc-attach -n ubu1 [/ Quellcode]

Sie haben jetzt eine Root-Shell in Ihrem Container. Es wird empfohlen, dass Sie ein Kennwort für den Root-Benutzer einrichten und ein reguläres Benutzerkonto erstellen :

[Quellcode] passwd
adduser beebom [/ sourcecode]

Ersetzen Sie beebom natürlich durch den gewünschten Benutzernamen. Sie können dann Software installieren und Ihren Container wie auf einem normalen System konfigurieren. Zum Beispiel in einem Debian- oder Ubuntu-Container:

[Sourcecode] apt installieren wget openssh-server htop tmux nano iptables [/ sourcecode]

Stoppen Sie Ihren Container

Wenn Sie mit dem Container fertig sind, verwenden Sie entweder den Befehl exit , um zum Hostsystem zurückzukehren . Verwenden lxc-stop jetzt den Befehl lxc-stop , um den Container zu stoppen :

[Quellcode] lxc-stop -n ubu1 [/ Quellcode]

Dadurch wird der Container ordnungsgemäß heruntergefahren, und es werden keine weiteren Ressourcen auf Ihrem System außer dem Festplattenspeicher belegt.

Klonen und Snapshots

Klone

Wenn Sie Programme in einem Container installiert und nach Ihren Wünschen konfiguriert haben, möchten Sie möglicherweise eine oder mehrere Kopien davon erstellen, um die Bereitstellung zu vereinfachen. Sie können dies tun, indem Sie einen Klon erstellen, bei dem es sich um eine exakte Replik eines Containers handelt.

Um beispielsweise einen Klon des ubu1 Containers zu erstellen (nennen wir ihn ubu2 ), stoppen Sie den Container zuerst mit lxc-stop und verwenden Sie dann den Befehl lxc-copy :

[Quellcode] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ sourcecode]

Hier gibt die Option -n den Quellcontainer und die Option -N den Namen des Klons an . Um zu überprüfen, ob der Container geklont wurde, verwenden Sie den Befehl lxc-ls :

Schnappschüsse

Angenommen, Sie sind im Begriff, potenziell gefährliche oder schwer wiederherzustellende Änderungen an einem Container vorzunehmen, z. B. die Neukonfiguration eines Webservers. Um den Schaden zu minimieren, können Sie einen Snapshot des Containers erstellen, bevor Sie eine solche Änderung vornehmen. Falls während der Konfiguration Probleme auftreten, können Sie den Container einfach anhalten und durch Wiederherstellen eines Snapshots in den vorherigen Betriebszustand zurückversetzen.

Um den Schnappschuss zu erstellen, stoppen Sie zuerst den Container :

[Quellcode] lxc-stop -n ubu1 [/ Quellcode]

Erstellen Sie anschließend einen Schnappschuss mit dem Befehl lxc-snapshot :

[Quellcode] lxc-Momentaufnahme -n ubu1 [/ Quellcode]

Dadurch wird ein Snapshot namens snap0 . Alle nachfolgenden Schnappschüsse, die Sie mit diesem Befehl erstellen, werden als snap1, snap2 usw. bezeichnet.

Danach können Sie den Container starten und die gewünschten Änderungen vornehmen. Wenn Sie zu einem von Ihnen erstellten Snapshot zurückkehren möchten, stoppen Sie den Container und verwenden Sie den Befehl lxc-snapshot mit dem Parameter -r, um einen Snapshot wiederherzustellen :

[Quellcode] lxc-Momentaufnahme -r snap0 -n ubu1 [/ Quellcode]

Dadurch wird der Snapshot snap0 im ubu1 Container wiederhergestellt.

Container beim Booten automatisch starten

Sie können einen Container (z. B. einen Webserver-Container) erstellen, der beim Starten des Systems automatisch gestartet wird. $HOME/.local/share/lxc//config Sie dazu in die Konfigurationsdatei des Containers, die sich in $HOME/.local/share/lxc//config, und fügen Sie die folgenden Zeilen hinzu :

[Quellcode] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

Die erste Zeile gibt an, dass der Container beim Booten gestartet werden soll. Die Sekunde teilt dem System mit , dass es 5 Sekunden warten soll, bevor der nächste Container gestartet wird.

Fehlerbehebung

Wenn beim Starten von Containern Probleme auftreten, führen Sie als lxc-start Befehl lxc-start im Vordergrundmodus aus . Zum Beispiel:

[Quellcode] lxc-start -n ubu1 -F [/ Quellcode]

Dies zeigt Ihnen die Fehler der aktuellen Konsole an, was sehr nützlich ist, um die Art des Problems zu ermitteln.

Probleme beim gleichzeitigen Ausführen mehrerer Container

Wenn Sie versuchen, mehrere Container gleichzeitig auszuführen, können Fehler wie "Kontingent erreicht" oder " Fehler beim Erstellen des konfigurierten Netzwerks" angezeigt werden. Dies liegt daran, dass Sie mehr Netzwerkschnittstellen als Ihnen zugewiesen ausführen. Sie können die Anzahl der Netzwerkbrücken erhöhen, die ein Benutzer ausführen kann, indem /etc/lxc/lxc-usernet Datei /etc/lxc/lxc-usernet als root /etc/lxc/lxc-usernet . Es könnte ungefähr so ​​aussehen:

[Quellcode] # BENUTZERNAME TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ sourcecode]

Sie können die Zahl am Ende (in diesem Beispiel 5) in eine größere Zahl wie 10 ändern . Auf diese Weise können Sie bis zu 10 Container gleichzeitig ausführen.

Andere Verwendungen von Linux-Containern

Linux-Container haben verschiedene Verwendungen. Sie können sie als einfache Testboxen verwenden, um beispielsweise verschiedene Konfigurationen eines Web- oder Datenbankservers zu testen, bevor Sie sie an einen Produktionsserver übergeben. Ein anderer Anwendungsfall ist der Test, wie eine Anwendung auf verschiedenen Versionen verschiedener Distributionen ausgeführt wird.

Sie können sie auch verwenden, um Anwendungen zu isolieren, denen Sie nicht vertrauen. Jeder Schaden, den eine solche Anwendung verursacht, ist auf ihren eigenen Container beschränkt und wirkt sich nicht auf das Hostsystem aus. Bitte beachten Sie, dass es zwar möglich ist, GUI-Anwendungen in einem Container auszuführen, dies jedoch einen erheblichen Zeit- und Arbeitsaufwand erfordert und daher nicht empfohlen wird. Wenn Sie GUI-Apps in einer Sandbox ausführen möchten, lesen Sie unseren Artikel zum Sandbox-Apps unter Linux.

Führen Sie mehrere Distributionen gleichzeitig mit Linux-Containern aus

Damit endet unser How-To, wenn mehrere Linux-Distributionen auf einem einzelnen Computer ausgeführt werden müssen, ohne den Aufwand einer virtuellen Maschine in voller Größe. Der Nutzen dieser Technologie ist nur durch Ihre Kreativität begrenzt, Sie können also experimentieren und neuartige Anwendungsfälle entdecken. Wenn Sie Probleme beim Einrichten von Containern haben, können Sie uns im Kommentarbereich eine Frage stellen.

Top