Einrichten und Verwenden von LXD unter Ubuntu 16.04

Einführung

Ein Linux-Container ist eine Gruppierung von Prozessen, die durch die Verwendung von Linux-Kernel-Sicherheitsfunktionen wie Namespaces und Kontrollgruppen vom Rest des Systems isoliert ist. Es ist ein Konstrukt, das einer virtuellen Maschine ähnelt, aber viel leichter ist. Sie müssen keinen zusätzlichen Kernel ausführen oder die Hardware simulieren. Dies bedeutet, dass Sie problemlos mehrere Container auf demselben Server erstellen können.

Angenommen, Sie haben einen Server, auf dem mehrere Websites für Ihre Kunden ausgeführt werden. In einer herkömmlichen Installation ist jede Website ein virtueller Host derselben Instanz des Apache- oder Nginx-Webservers. Bei Linux-Containern kann jedoch jede Website in einem eigenen Container mit einem eigenen Webserver eingerichtet werden. Mit Linux-Containern bündeln Sie Ihre Anwendung und ihre Abhängigkeiten in einem Container, ohne den Rest des Systems zu beeinträchtigen.

Mit LXD können Sie diese Container erstellen und verwalten. LXD bietet einen Hypervisor-Service zur Verwaltung des gesamten Lebenszyklus von Containern. In diesem Lernprogramm konfigurieren Sie LXD und verwenden es, um Nginx in einem Container auszuführen. Anschließend leiten Sie den Datenverkehr an den Container weiter, um die Website über das Internet zugänglich zu machen.

Voraussetzungen

Um dieses Lernprogramm abzuschließen, benötigen Sie Folgendes:

Schritt 1 - LXD konfigurieren

LXD ist bereits auf Ubuntu installiert, muss jedoch entsprechend konfiguriert werden, bevor Sie es auf einem Server verwenden können. Sie müssen Ihr Benutzerkonto einrichten, um Container zu verwalten, und dann den Typ des Speicher-Backends konfigurieren, um die Container zu speichern und das Netzwerk zu konfigurieren.

Melden Sie sich mit dem Nicht-Root-Benutzerkonto beim Server an. Fügen Sie dann Ihren Benutzer zur Gruppe "+ lxd +" hinzu, damit Sie alle Container-Verwaltungsaufgaben ausführen können:

sudo usermod --append --groups lxd

Melden Sie sich vom Server ab und wieder an, damit Ihre neue SSH-Sitzung mit der neuen Gruppenmitgliedschaft aktualisiert wird. Sobald Sie angemeldet sind, können Sie mit der Konfiguration von LXD beginnen.

Konfigurieren Sie nun das Speicher-Backend. Das empfohlene Speicher-Backend für LXD ist das ZFS-Dateisystem, das entweder in einer vorab zugewiesenen Datei oder unter Verwendung von Block Storage gespeichert wird. Um die ZFS-Unterstützung in LXD zu verwenden, aktualisieren Sie Ihre Paketliste und installieren Sie das Paket + zfsutils-linux +:

sudo apt-get update
sudo apt-get install zfsutils-linux

Sie können jetzt LXD konfigurieren. Starten Sie den LXD-Initialisierungsprozess mit dem Befehl + lxd init +:

sudo lxd init

Sie werden aufgefordert, die Details für das Speicher-Backend anzugeben. Sobald Sie diese Konfiguration abgeschlossen haben, konfigurieren Sie das Netzwerk für die Container.

Zunächst werden Sie gefragt, ob Sie einen neuen Speicherpool konfigurieren möchten. Sie sollten mit "+ yes. +" Antworten.

Do you want to configure a new storage pool (yes/no) [default=yes]?

Anschließend werden Sie aufgefordert, das Speicher-Backend anzugeben, und Sie haben zwei Möglichkeiten: "+ dir " oder " zfs ". Die Option " dir " weist LXD an, Container in Verzeichnissen im Dateisystem des Servers zu speichern. Die Option ` zfs +` verwendet das kombinierte ZFS-Dateisystem und den Manager für logische Volumes.

Wir werden die Option "+ zfs " verwenden. Durch die Verwendung von ` zfs +` erzielen wir sowohl Speichereffizienz als auch bessere Reaktionszeiten. Wenn wir beispielsweise zehn Container aus demselben ursprünglichen Container-Image erstellen, verwenden alle den Speicherplatz eines einzelnen Container-Images. Von da an werden nur ihre Änderungen am ursprünglichen Container-Image im Speicher-Backend gespeichert.

OutputName of the storage backend to use (dir or zfs) [default=zfs]:

Wenn Sie "+ zfs " wählen, werden Sie aufgefordert, einen neuen ZFS-Pool zu erstellen und den Pool zu benennen. Wählen Sie " yes ", um den Pool zu erstellen, und rufen Sie den Pool " lxd +" auf:

OutputCreate a new ZFS pool (yes/no) [default=yes]?
Name of the new ZFS pool [default=lxd]:

Dann werden Sie gefragt, ob Sie ein vorhandenes Blockgerät verwenden möchten:

OutputWould you like to use an existing block device (yes/no) [default=no]?

Wenn Sie "+ yes " sagen, müssen Sie LXD mitteilen, wo sich das Gerät befindet. Wenn Sie " no +" sagen, verwendet LXD eine vorab zugewiesene Datei. Mit dieser Option verwenden Sie den freien Speicherplatz auf dem Server.

Es folgen zwei Abschnitte, je nachdem, ob Sie eine vorab zugewiesene Datei oder ein Blockgerät verwenden möchten. Befolgen Sie die entsprechenden Schritte für Ihren Fall. Nachdem Sie den Speichermechanismus festgelegt haben, konfigurieren Sie die Netzwerkoptionen für Ihre Container.

Option 1 - Verwenden einer vorab zugewiesenen Datei

Sie würden eine vorab zugewiesene Datei verwenden, wenn Sie keinen Zugriff auf ein separates Blockspeichergerät zum Speichern von Containern haben. Führen Sie die folgenden Schritte aus, um LXD für die Verwendung einer vorab zugewiesenen Datei zum Speichern von Containern zu konfigurieren.

Wenn Sie aufgefordert werden, ein vorhandenes Block-Gerät zu verwenden, geben Sie zuerst "+ no +" ein:

OutputWould you like to use an existing block device (yes/no) [default=no]?

Als nächstes werden Sie aufgefordert, die Größe des * loop device * anzugeben, was LXD die vorab zugewiesene Datei nennt. + Verwenden Sie die vorgeschlagene Standardgröße für die vorab zugewiesene Datei:

OutputSize in GB of the new loop device (1GB minimum) [default=15]:

Als Faustregel gilt, dass 15 GB die kleinste Größe sind, die Sie erstellen sollten. Sie möchten genügend Speicherplatz vorbelegen, damit Sie mindestens 10 GB freien Speicherplatz haben, wenn Sie Ihre Container erstellt haben.

Sobald das Gerät konfiguriert ist, werden Sie aufgefordert, die Netzwerkeinstellungen zu konfigurieren. Gehen Sie zu Link: # step-2-% E2% 80% 94-configuration-networking [Schritt 2], um das Setup fortzusetzen.

Option 2 - Verwenden eines Blockgeräts

Wenn Sie Block Storage als Speicher-Backend verwenden möchten, müssen Sie das Gerät suchen, das auf das von Ihnen erstellte Block Storage-Volume verweist, um es in der Konfiguration von LXD anzugeben. Gehen Sie zur Registerkarte * Volumes * in der https://cloud.digitalocean.com [DigitalOcean-Systemsteuerung], suchen Sie Ihr Volume, klicken Sie auf das Popup * More * und klicken Sie dann auf * Config Instructions *.

Suchen Sie das Gerät, indem Sie den Befehl zum Formatieren des Volumes aufrufen. Suchen Sie insbesondere nach dem Pfad, der im Befehl + sudo mkfs.ext4 -F + angegeben ist. Führen Sie keinen der Befehle auf dieser Seite aus, da nur der richtige Gerätename für LXD ermittelt werden muss. Die folgende Abbildung zeigt ein Beispiel für den Gerätenamen des Volumes. Sie benötigen nur den Teil, der durch die rote Linie unterstrichen ist:

image: https: //assets.digitalocean.com/articles/lxd_containers_ubuntu_1604/6rDyC1l.png [Die Konfigurationsanweisungen zeigen das Gerät für das erstellte Blockspeichervolume.]

Sie können den Gerätenamen auch mit dem folgenden Befehl identifizieren:

ls -l
total 0
lrwxrwxrwx 1 root root  9 Sep  16 20:30  -> ../../sda

In diesem Fall lautet der Gerätename für das Volume "+ / dev / disk / by-id / scsi-0D0_Volume_volume-fra1-01 +", obwohl Ihr Name davon abweichen kann.

Wenn Sie den Gerätenamen für das Volume ermittelt haben, fahren Sie mit der LXD-Installation fort. Wenn Sie aufgefordert werden, ein vorhandenes Blockgerät zu verwenden, wählen Sie "+ yes +" und geben Sie den Pfad zu Ihrem Gerät an:

Output of the "lxd init" commandWould you like to use an existing block device (yes/no) [default=no]?
Path to the existing block device:

Sobald Sie die Festplatte angegeben haben, werden Sie aufgefordert, die Netzwerkoptionen zu konfigurieren.

Schritt 2 - Netzwerk konfigurieren

Sobald Sie das Speicher-Backend konfiguriert haben, werden Sie aufgefordert, das Netzwerk für LXD zu konfigurieren.

Zuerst fragt LXD, ob Sie es über das Netzwerk zugänglich machen möchten. Wenn Sie "+ yes " wählen, können Sie LXD von Ihrem lokalen Computer aus verwalten, ohne SSH auf diesen Server ausführen zu müssen. Behalten Sie den Standardwert von " no +" bei:

Output of the "lxd init" command - LXD over the networkWould you like LXD to be available over the network (yes/no) [default=no]?

Wenn Sie diese Option aktivieren möchten, lesen Sie bitte LXD 2.0: Remote-Hosts und Container Migration, um mehr zu erfahren.

Wir werden dann gebeten, eine Netzwerkbrücke für LXD-Container zu konfigurieren. Dies ermöglicht die folgenden Funktionen:

  • Jeder Container erhält automatisch eine private IP-Adresse.

  • Die Container können über das private Netzwerk miteinander kommunizieren.

  • Jeder Container kann Verbindungen zum Internet herstellen.

  • Auf die von Ihnen erstellten Container kann nicht über das Internet zugegriffen werden. Sie können keine Verbindung über das Internet herstellen und einen Container erreichen, es sei denn, Sie aktivieren ihn ausdrücklich. Im nächsten Schritt erfahren Sie, wie Sie den Zugriff auf einen bestimmten Container zulassen.

Wenn Sie aufgefordert werden, die LXD-Bridge zu konfigurieren, wählen Sie "+ yes +":

Output of the "lxd init" command - Networking for the containersDo you want to configure the LXD bridge (yes/no) [default=yes]?

Daraufhin wird der folgende Dialog angezeigt:

image: https://assets.digitalocean.com/articles/lxd_containers_ubuntu_1604/u9D79uB.png [LXD-Netzwerkkonfiguration, Start des Konfigurationsassistenten]

Bestätigen Sie, dass Sie die Netzwerkbrücke einrichten möchten.

Sie werden aufgefordert, die Brücke zu benennen. Übernehmen Sie den Standardwert.

Sie werden aufgefordert, die Netzwerkkonfiguration für IPv4 und IPv6 durchzuführen. In diesem Tutorial arbeiten wir nur mit IPv4.

Wenn Sie aufgefordert werden, ein IPv4-Subnetz einzurichten, wählen Sie * Ja *. Sie werden informiert, dass ein zufälliges Subnetz für Sie konfiguriert wurde. Wählen Sie * Ok *, um fortzufahren.

Akzeptieren Sie den Standardwert, wenn Sie zur Eingabe einer gültigen IPv4-Adresse aufgefordert werden.

Akzeptieren Sie den Standardwert, wenn Sie zur Eingabe einer gültigen CIDR-Maske aufgefordert werden.

Akzeptieren Sie den Standardwert, wenn Sie zur Eingabe der ersten DHCP-Adresse aufgefordert werden. Machen Sie dasselbe für die letzte DHCP-Adresse sowie die maximale Anzahl von DHCP-Clients.

Wählen Sie * Ja *, wenn Sie gefragt werden, ob Sie den IPv4-Verkehr NAT-fähig machen möchten.

Wenn Sie aufgefordert werden, ein IPv6-Subnetz zu konfigurieren, wählen Sie * Nein *. Nach Abschluss der Netzwerkeinrichtung wird die folgende Ausgabe angezeigt:

OutputWarning: Stopping lxd.service, but it can still be activated by:
 lxd.socket
LXD has been successfully configured.

Sie können jetzt Ihre Container erstellen.

Schritt 3 - Erstellen des Nginx-Containers

Sie haben LXD erfolgreich konfiguriert und können nun Ihren ersten Container erstellen und verwalten. Sie verwalten Container mit dem Befehl + lxc +.

Verwenden Sie "+ lxc list +", um die verfügbaren installierten Container anzuzeigen:

lxc list

Sie sehen die folgende Ausgabe:

Output of the "lxd list" commandGenerating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+

Da dies das erste Mal ist, dass der Befehl "+ lxc +" mit dem LXD-Hypervisor kommuniziert, werden Sie in der Ausgabe darauf hingewiesen, dass der Befehl automatisch ein Client-Zertifikat für die sichere Kommunikation mit LXD erstellt hat. Anschließend werden einige Informationen zum Starten eines Containers angezeigt. Schließlich zeigt der Befehl eine leere Liste von Containern an, was zu erwarten ist, da wir noch keine erstellt haben.

Erstellen wir einen Container, in dem Nginx ausgeführt wird. Dazu verwenden wir den Befehl "+ lxc launch ", um einen Ubuntu 16.04-Container mit dem Namen " webserver +" zu erstellen und zu starten.

Erstellen Sie den Container "+ webserver +":

lxc launch ubuntu:x webserver

Das + x + in + ubuntu: x + ist eine Abkürzung für den ersten Buchstaben von Xenial, dem Codenamen von Ubuntu 16.04. + ubuntu: + ist die Kennung für das vorkonfigurierte Repository von LXD-Images. Sie können auch "+ ubuntu: 16.04 +" für den Bildnamen verwenden.

Da Sie zum ersten Mal einen Container erstellt haben, lädt dieser Befehl das Container-Image aus dem Internet herunter und speichert es lokal im Cache, damit es beim Erstellen eines neuen Containers schneller erstellt wird. Sie sehen diese Ausgabe, wenn Ihr neuer Container erstellt wird:

OutputGenerating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

Creating webserver
Retrieving image: 100%
Starting webserver

Verwenden Sie jetzt, da der Container ausgeführt wird, den Befehl + lxc list +, um Informationen dazu anzuzeigen:

lxc list

Die Ausgabe zeigt eine Tabelle mit dem Namen jedes Containers, seinem aktuellen Status, seiner IP-Adresse, seinem Typ und ob Momentaufnahmen gemacht wurden.

Ausgabe

+-----------+---------+-----------------------+------+------------+-----------+
|  NAME     |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+------+------------+-----------+
| webserver | RUNNING |  (eth0)   |      | PERSISTENT | 0         |
+-----------+---------+-----------------------+------+------------+-----------+

Notieren Sie sich die IPv4-Adresse des Containers. Sie müssen Ihre Firewall so konfigurieren, dass der Datenverkehr von außerhalb der Welt zugelassen wird.

Nun richten wir Nginx im Container ein:

Schritt 4 - Konfigurieren des Nginx-Containers

Stellen Sie eine Verbindung zum Container "+ webserver +" her und konfigurieren Sie den Webserver.

Stellen Sie mit dem Befehl "+ lxc exec +", der den Namen des Containers und die auszuführenden Befehle enthält, eine Verbindung zum Container her:

lxc exec webserver -- sudo --login --user ubuntu

Die erste "+ - " - Zeichenfolge gibt an, dass die Befehlsparameter für " lxc " dort enden sollen, und der Rest der Zeile wird als Befehl übergeben, der im Container ausgeführt werden soll. Der Befehl lautet " sudo --login --user ubuntu " und bietet eine Anmeldeshell für das vorkonfigurierte Konto " ubuntu +" im Container.

Sobald Sie sich im Container befinden, sieht Ihre Shell-Eingabeaufforderung wie folgt aus.

Outputubuntu@webserver:~$

Dieser * ubuntu * -Benutzer im Container hat einen vorkonfigurierten + sudo + - Zugriff und kann + sudo + - Befehle ausführen, ohne ein Kennwort anzugeben. Diese Hülle ist auf die Grenzen des Behälters beschränkt. Alles, was Sie in dieser Shell ausführen, verbleibt im Container und kann nicht zum Hostserver flüchten.

Lassen Sie uns Nginx in diesem Container einrichten. Aktualisieren Sie die Paketliste der Ubuntu-Instanz im Container und installieren Sie Nginx:

sudo apt-get update
sudo apt-get install nginx

Bearbeiten Sie dann die Standardwebseite für diese Site und fügen Sie Text hinzu, der verdeutlicht, dass diese Site im Container "+ webserver " gehostet wird. Öffnen Sie die Datei " / var / www / html / index.nginx-debian.html":

sudo nano /var/www/html/index.nginx-debian.html

Nehmen Sie die folgende Änderung an der Datei vor:

Bearbeitete Datei /var/www/html/index.nginx-debian.html

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx !</title>
<style>
   body {
       width: 35em;
       margin: 0 auto;
       font-family: Tahoma, Verdana, Arial, sans-serif;
   }
</style>
</head>
<body>
<h1>Welcome to nginx !</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
...

Wir haben die Datei an zwei Stellen bearbeitet und speziell den Text "+ on LXD container webserver" hinzugefügt. Speichern Sie die Datei und beenden Sie Ihren Editor.

Melden Sie sich jetzt vom Container ab und kehren Sie zum Host-Server zurück:

logout

Verwenden Sie "+ curl ", um zu testen, ob der Webserver im Container funktioniert. Sie benötigen die IP-Adressen der Webcontainer, die Sie zuvor mit dem Befehl " lxd list +" gefunden haben.

curl http:///

Die Ausgabe sollte sein:

Output<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx !</title>
<style>
   body {
       width: 35em;
       margin: 0 auto;
       font-family: Tahoma, Verdana, Arial, sans-serif;
   }
</style>
</head>
<body>
<h1>Welcome to nginx !</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
...

Der Webserver funktioniert, aber wir können nur über die private IP darauf zugreifen. Leiten wir externe Anfragen an diesen Container weiter, damit die Welt auf unsere Website zugreifen kann.

Schritt 5 - Weiterleiten eingehender Verbindungen an den Nginx-Container

Das letzte Puzzleteil besteht darin, den Webserver-Container mit dem Internet zu verbinden. Nginx ist in einem Container installiert und standardmäßig nicht über das Internet zugänglich. Wir müssen unseren Server so einrichten, dass alle Verbindungen, die er vom Internet über den Port "+ 80 " empfängt, an den Container " webserver " weitergeleitet werden. Dazu erstellen wir eine " iptables +" - Regel zum Weiterleiten von Verbindungen. Weitere Informationen zu IPTables finden Sie unter How the IPtables Firewall Works und https://www.digitalocean.com/community/ Tutorials / iptables-essentials-allgemeine-Firewall-Regeln-und-Befehle [IPtables Essentials: Allgemeine Firewall-Regeln und -Befehle].

Der Befehl "+ iptables +" erfordert zwei IP-Adressen: die öffentliche IP-Adresse des Servers ("") und die private IP-Adresse des "+ nginx +" - Containers (""), die Sie mit "" erhalten können + lxc liste + `befehl.

Führen Sie diesen Befehl aus, um die Regel zu erstellen:

PORT= PUBLIC_IP= CONTAINER_IP= \
sudo -E bash -c 'iptables -t nat -I PREROUTING -i eth0 -p TCP -d $PUBLIC_IP --dport $PORT -j DNAT --to-destination $CONTAINER_IP:$PORT -m comment --comment "forward to the Nginx container"'

So funktioniert der Befehl:

  • "+ -t nat " gibt an, dass wir die " nat +" - Tabelle für die Adressübersetzung verwenden.

  • "+ -I PREROUTING +" gibt an, dass die Regel der PREROUTING-Kette hinzugefügt wird.

  • + -i eth0 + gibt die Schnittstelle * eth0 * an, die die öffentliche Standardschnittstelle für Droplets ist.

  • "+ -p TCP +" besagt, dass wir das TCP-Protokoll verwenden.

  • + -d $ PUBLIC_IP + gibt die Ziel-IP-Adresse für die Regel an.

  • + - dport $ PORT +: Gibt den Zielport an (z. B. + 80 +).

  • + -j DNAT + sagt aus, dass wir zu Destination NAT (DNAT) springen wollen.

  • + - to-destination $ CONTAINER_IP: $ PORT + gibt an, dass die Anforderung an die IP-Adresse des bestimmten Containers und des Zielports gesendet werden soll.

Sie können die IPTables-Regeln auflisten, indem Sie diesen Befehl ausführen:

sudo iptables -t nat -L PREROUTING

Es wird eine Ausgabe ähnlich der folgenden angezeigt:

Output Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere                    tcp dpt:http /* forward to this container */ to::80
...

Testen Sie nun, ob der Webserver tatsächlich über das Internet erreichbar ist, indem Sie von Ihrem lokalen Computer mit dem Befehl "+ curl +" wie folgt darauf zugreifen:

curl --verbose  'http://'

Sie sehen die Überschriften, gefolgt vom Inhalt der Webseite, die Sie im Container erstellt haben:

Output*   Trying ...
* Connected to  () port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.10.0 (Ubuntu)
...
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx !</title>
<style>
   body {
...

Dies bestätigt, dass die Anforderungen an den Container gesendet werden.

Um die Firewall-Regel zu speichern, damit sie nach einem Neustart erneut angewendet wird, installieren Sie das Paket + iptables-persistent +:

sudo apt-get install iptables-persistent

Bei der Installation des Pakets werden Sie aufgefordert, die aktuellen Firewall-Regeln zu speichern. Akzeptieren und speichern Sie alle aktuellen Regeln.

Wenn Sie Ihren Computer neu starten, wird die Firewall-Regel angezeigt. Außerdem wird der Nginx-Dienst in Ihrem LXD-Container automatisch neu gestartet.

Nachdem Sie alles eingerichtet haben, schauen wir uns an, wie Sie es abreißen können.

Schritt 5 - Anhalten und Entfernen des Behälters

Sie können entscheiden, dass Sie den Behälter abnehmen und ersetzen möchten. Gehen wir diesen Prozess durch:

Um den Container zu stoppen, verwenden Sie "+ lxc stop +":

lxc stop

Verwenden Sie den Befehl + lxc list +, um den Status zu überprüfen.

Output+-----------+---------+------+------+------------+-----------+
|   NAME    |  STATE  | IPV4 | IPV6 |    TYPE    | SNAPSHOTS |
+-----------+---------+------+------+------------+-----------+
| webserver | STOPPED |      |      | PERSISTENT | 0         |
+-----------+---------+------+------+------------+-----------+

Um den Container zu entfernen, verwenden Sie "+ lxc delete +":

lxc delete webserver

Wenn Sie "+ lxc list +" erneut ausführen, wird angezeigt, dass kein Container ausgeführt wird:

Output+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+

Verwenden Sie den Befehl + lxc help +, um zusätzliche Optionen anzuzeigen.

Um die Firewall-Regel zu entfernen, die den Datenverkehr an den Container weiterleitet, suchen Sie zunächst die Regel in der Liste der Regeln mit diesem Befehl, der jeder Regel eine Zeilennummer zuordnet:

sudo iptables -t nat -L PREROUTING --line-numbers

Sie sehen Ihre Regel, der eine Zeilennummer vorangestellt ist:

OutputChain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
   DNAT       tcp  --  anywhere                   tcp dpt:http /* forward to the Nginx container */ to:

Verwenden Sie diese Zeilennummer, um die Regel zu entfernen:

sudo iptables -t nat -D PREROUTING

Stellen Sie sicher, dass die Regel nicht mehr vorhanden ist, indem Sie die Regeln erneut auflisten:

`sudo iptables -t nat -L PREROUTING --line-numbers`

Die Regel wird weg sein:

OutputChain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Speichern Sie nun die Änderungen, damit die Regel beim Neustart des Servers nicht wieder angezeigt wird:

sudo netfilter-persistent save

Sie können jetzt einen anderen Container mit Ihren eigenen Einstellungen aufrufen und eine neue Firewall-Regel hinzufügen, um den Datenverkehr an ihn weiterzuleiten.

Fazit

Sie haben eine Website mit Nginx eingerichtet, die in einem LXD-Container ausgeführt wird. Von hier aus können Sie weitere Websites konfigurieren, die jeweils auf einen eigenen Container beschränkt sind, und einen Reverse-Proxy verwenden, um den Datenverkehr auf den entsprechenden Container zu leiten. Das Tutorial How to Hosten Sie mehrere Websites mit Nginx und HAProxy. Verwenden Sie LXD unter Ubuntu 16.04, um diese einzurichten.

Mit LXD können Sie auch Snapshots des vollständigen Status von Containern erstellen, wodurch es einfach ist, Backups zu erstellen und Container zu einem späteren Zeitpunkt zurückzusetzen. Wenn Sie LXD auf zwei verschiedenen Servern installieren, können Sie eine Verbindung herstellen und Container zwischen Servern über das Internet migrieren.

Weitere Informationen zu LXD finden Sie unter diese Reihe von Blog-Posts zu LXD 2.0, die vom Betreuer von LXD verfasst wurden .

Sie können auch try LXD online und dem webbasierten Tutorial folgen, um mehr Übung zu erhalten.