Was ist LXD?
LXD (ausgesprochen „Lex-Dee“) ist ein System-Container-Manager, der auf LXC (Linux Containers) aufbaut und derzeit von Canonical unterstützt wird. Das Ziel von LXD ist es, ein Erlebnis zu bieten, das einer virtuellen Maschine ähnelt, jedoch durch Containerisierung und nicht durch Hardwarevirtualisierung. Im Vergleich zu Docker zum Bereitstellen von Anwendungen bietet LXD nahezu vollständige Betriebssystemfunktionalität mit zusätzlichen Funktionen wie Snapshots, Live-Migrationen und Speicherverwaltung.
Die Hauptvorteile von LXD sind die Unterstützung von Containern mit hoher Dichte und die Leistung, die es im Vergleich zu virtuellen Maschinen bietet. Ein Computer mit 2 GB RAM kann ein halbes Dutzend Container angemessen unterstützen. Darüber hinaus unterstützt LXD offiziell die Container-Images der wichtigsten Linux-Distributionen. Wir können die Linux-Distribution und -Version auswählen, die im Container ausgeführt werden soll.
Diese Anleitung behandelt die Installation und Einrichtung von LXD 3 auf einem Linode und die Einrichtung eines Apache-Webservers in einem Container.
Hinweis Der Einfachheit halber der Begriff Container wird in diesem Handbuch verwendet, um die Container des LXD-Systems zu beschreiben.
Bevor Sie beginnen
-
Schließen Sie den Leitfaden zum Erstellen einer Compute-Instanz ab. Wählen Sie einen Linode mit mindestens 2 GB RAM-Speicher, wie z. B. den Linode 2 GB. Geben Sie die Ubuntu 19.04-Distribution an. Sie können eine andere Linux-Distribution angeben, solange es Unterstützung für snap-Pakete (snapd) gibt; Weitere Informationen finden Sie unter Weitere Informationen.
-
Folgen Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz, um Ihr System zu aktualisieren. Möglicherweise möchten Sie auch die Zeitzone festlegen, Ihren Hostnamen konfigurieren, ein eingeschränktes Benutzerkonto erstellen und den SSH-Zugriff sichern.
Konfigurieren Sie die Snap-Paketunterstützung
LXD ist als Debian-Paket in den LTS-Versionen (Long Term Support) von Ubuntu verfügbar, z. B. Ubuntu 18.04 LTS. Für andere Ubuntu-Versionen und andere Distributionen ist LXD als Snap-Paket verfügbar. Snap-Pakete sind universelle Pakete, da es eine einzelne Paketdatei gibt, die auf allen unterstützten Linux-Distributionen funktioniert. Weitere Informationen darüber, was ein Snap-Paket ist, welche Linux-Distributionen unterstützt werden und wie es eingerichtet wird, finden Sie im Abschnitt "Weitere Informationen".
-
Stellen Sie sicher, dass die Snap-Unterstützung korrekt installiert ist. Der folgende Befehl zeigt entweder, dass keine Snap-Pakete installiert sind, oder dass einige installiert sind.
snap list
No snaps are installed yet. Try 'snap install hello-world'.
-
Zeigen Sie die Details des LXD-Snap-Pakets
lxd
an . Die folgende Ausgabe zeigt, dass derzeit die neueste Version von LXD3.12
ist im standardmäßigenstable
Kanal. Dieser Kanal wird häufig mit neuen Funktionen aktualisiert. Es gibt auch andere Kanäle wie3.0/stable
Kanal, der die LTS LXD-Version (unterstützt zusammen mit Ubuntu 18.04, bis 2023) und den2.0/stable
enthält Kanal (unterstützt zusammen mit Ubuntu 16.04, bis 2021). Wir werden die neueste Version von LXD aus dem standardmäßigenstable
verwenden Kanal.snap info lxd
name: lxd summary: System container manager and API publisher: Canonical✓ contact: https://github.com/lxc/lxd/issues license: Apache-2.0 description: | **LXD is a system container manager** With LXD you can run hundreds of containers of a variety of Linux distributions, apply resource limits, pass in directories, USB devices or GPUs and setup any network and storage you want. LXD containers are lightweight, secure by default and a great alternative to running Linux virtual machines. **Run any Linux distribution you want** Pre-made images are available for Ubuntu, Alpine Linux, ArchLinux, CentOS, Debian, Fedora, Gentoo, OpenSUSE and more. A full list of available images can be [found here](https://images.linuxcontainers.org) Can't find the distribution you want? It's easy to make your own images too, either using our `distrobuilder` tool or by assembling your own image tarball by hand. **Containers at scale** LXD is network aware and all interactions go through a simple REST API, making it possible to remotely interact with containers on remote systems, copying and moving them as you wish. Want to go big? LXD also has built-in clustering support, letting you turn dozens of servers into one big LXD server. **Configuration options** Supported options for the LXD snap (`snap set lxd KEY=VALUE`): - criu.enable: Enable experimental live-migration support [default=false] - daemon.debug: Increases logging to debug level [default=false] - daemon.group: Group of users that can interact with LXD [default=lxd] - ceph.builtin: Use snap-specific ceph configuration [default=false] - openvswitch.builtin: Run a snap-specific OVS daemon [default=false] [Documentation](https://lxd.readthedocs.io) snap-id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu channels: stable: 3.12 2019-04-16 (10601) 56MB - candidate: 3.12 2019-04-26 (10655) 56MB - beta: ↑ edge: git-570aaa1 2019-04-27 (10674) 56MB - 3.0/stable: 3.0.3 2018-11-26 (9663) 53MB - 3.0/candidate: 3.0.3 2019-01-19 (9942) 53MB - 3.0/beta: ↑ 3.0/edge: git-eaa62ce 2019-02-19 (10212) 53MB - 2.0/stable: 2.0.11 2018-07-30 (8023) 28MB - 2.0/candidate: 2.0.11 2018-07-27 (8023) 28MB - 2.0/beta: ↑ 2.0/edge: git-c7c4cc8 2018-10-19 (9257) 26MB -
-
Installieren Sie
lxd
Snap-Paket. Führen Sie den folgenden Befehl aus, um das Snap-Paket für LXD zu installieren.sudo snap install lxd
lxd 3.12 from Canonical✓ installed
Sie können überprüfen, ob das Snap-Paket installiert wurde, indem Sie snap list
ausführen wieder. Der core
Das Snap-Paket ist eine Voraussetzung für jedes System mit Unterstützung für das Snap-Paket. Wenn Sie Ihr erstes Snap-Paket installieren, core
wird installiert und mit allen anderen Snap-Paketen geteilt, die in Zukunft installiert werden.
snap list
Name Version Rev Tracking Publisher Notes
core 16-2.38 6673 stable canonical✓ core
lxd 3.12 10601 stable canonical✓ -
LXD initialisieren
-
Fügen Sie Ihren Nicht-Root-Unix-Benutzer zum
lxd
hinzu Gruppe:sudo usermod -a -G lxd username
Hinweis Durch Hinzufügen des Nicht-Root-Unix-Benutzerkontos zu
lxd
Gruppe können Sie jedenlxc
ausführen Befehle ohne vorangestelltessudo
. Ohne diesen Zusatz müssten Siesudo
voranstellen zu jedemlxc
Befehl. -
Starten Sie eine neue SSH-Sitzung, damit die vorherige Änderung wirksam wird. Melden Sie sich beispielsweise ab und wieder an.
-
Überprüfen Sie den verfügbaren freien Speicherplatz:
df -h /
In diesem Fall gibt es 45 GB freien Speicherplatz. LXD benötigt mindestens 15 GB Speicherplatz für die Speicheranforderungen von Containern. Wir werden 15 GB Speicherplatz für LXD zuweisen, sodass 30 GB freier Speicherplatz für die Anforderungen des Servers übrig bleiben.Filesystem Size Used Avail Use% Mounted on /dev/sda 49G 2.0G 45G 5% /
-
Führen Sie
lxd init
aus um LXD zu initialisieren:sudo lxd init
Sie werden während des Initialisierungsprozesses mehrmals dazu aufgefordert. Wählen Sie die Standardwerte für alle Optionen.
Would you like to use LXD clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: Name of the new storage pool [default=default]: Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: Create a new ZFS pool? (yes/no) [default=yes]: Would you like to use an existing block device? (yes/no) [default=no]: Size in GB of the new loop device (1GB minimum) [default=15GB]: Would you like to connect to a MAAS server? (yes/no) [default=no]: Would you like to create a new local network bridge? (yes/no) [default=yes]: What should the new bridge be called? [default=lxdbr0]: What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: Would you like LXD to be available over the network? (yes/no) [default=no]: Would you like stale cached images to be updated automatically? (yes/no) [default=yes] Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
Apache-Webserver mit LXD
Dieser Abschnitt erstellt einen Container, installiert den Apache-Webserver und fügt die entsprechenden iptables
hinzu Regeln, um Post 80 aufzudecken.
-
Starten Sie einen neuen Container:
lxc launch ubuntu:18.04 web
-
Aktualisieren Sie die Paketliste im Container.
lxc exec web -- apt update
-
Installieren Sie den Apache im LXD-Container.
lxc exec web -- apt install apache2
-
Holen Sie sich eine Shell im LXD-Container.
lxc exec web -- sudo --user ubuntu --login
-
Bearbeiten Sie die Standardwebseite für Apache, um einen Verweis darauf zu erstellen, dass sie in einem LXD-Container ausgeführt wird.
sudo nano /var/www/html/index.html
Ändern Sie die Zeile
It works!
(Zeilennummer 224) zuIt works inside a LXD container!
. Dann speichern und beenden. -
Gehen Sie zurück zum Host. Wir haben alle notwendigen Änderungen am Container vorgenommen.
exit
-
Fügen Sie ein LXD-Proxy-Gerät hinzu um Verbindungen aus dem Internet zu Port 80 (HTTP) auf dem Server zu Port 80 an diesem Container umzuleiten.
sudo lxc config device add web myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80
Hinweis In neueren Versionen von LXD müssen Sie eine IP-Adresse angeben (z. B. 127.0.0.1 ) anstelle eines Hostnamens (z. B. localhost ). Wenn Ihr Container bereits über ein Proxy-Gerät verfügt, das Hostnamen verwendet, können Sie die Containerkonfiguration bearbeiten, um sie durch IP-Adressen zu ersetzen, indem Sie lxc config edit web
ausführen .
-
Navigieren Sie von Ihrem lokalen Computer in einem Webbrowser zur öffentlichen IP-Adresse Ihres Linode. Sie sollten die Standard-Apache-Seite sehen:
Allgemeine LXD-Befehle
-
Alle Container auflisten:
lxc list
To start your first container, try: lxc launch ubuntu:18.04 +------+-------+------+------+------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+-------+------+------+------+-----------+
-
Alle verfügbaren Repositories von Container-Images auflisten:
lxc remote list
Das Repository+-----------------+------------------------------------------+---------------+-------------+--------+--------+ | NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | none | YES | NO | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | local (default) | unix:// | lxd | file access | NO | YES | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | ubuntu | https://cloud-images.ubuntu.com/releases | simplestreams | none | YES | YES | +-----------------+------------------------------------------+---------------+-------------+--------+--------+ | ubuntu-daily | https://cloud-images.ubuntu.com/daily | simplestreams | none | YES | YES | +-----------------+------------------------------------------+---------------+-------------+--------+--------+
ubuntu
enthält Container-Images von Ubuntu-Versionen. Dieimages
Das Repository enthält Container-Images einer großen Anzahl verschiedener Linux-Distributionen. Dieubuntu-daily
verfügt über tägliche Container-Images, die zu Testzwecken verwendet werden können. Dielocal
repository ist der LXD-Server, den wir gerade installiert haben. Es ist nicht öffentlich und kann zum Speichern Ihrer eigenen Container-Images verwendet werden. -
Alle verfügbaren Container-Images aus einem Repository auflisten:
lxc image list ubuntu:
+------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | b (11 more) | 5b72cf46f628 | yes | ubuntu 18.04 LTS amd64 (release) (20190424) | x86_64 | 180.37MB | Apr 24, 2019 at 12:00am (UTC) | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | c (5 more) | 4716703f04fc | yes | ubuntu 18.10 amd64 (release) (20190402) | x86_64 | 313.29MB | Apr 2, 2019 at 12:00am (UTC) | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ | d (5 more) | faef94acf5f9 | yes | ubuntu 19.04 amd64 (release) (20190417) | x86_64 | 322.56MB | Apr 17, 2019 at 12:00am (UTC) | +------------------+--------------+--------+-----------------------------------------------+---------+----------+-------------------------------+ .....................................................................
Hinweis Die ersten beiden Spalten für den Alias und den Fingerabdruck stellen eine Kennung bereit, die verwendet werden kann, um das Container-Image beim Starten anzugeben.
Das Ausgabe-Snippet zeigt die Container-Images der Ubuntu-Versionen 18.04 LTS, 18.10 und 19.04. Beim Erstellen eines Containers können wir einfach den kurzen Alias angeben. Beispiel:ubuntu:b
bedeutet, dass das Repositoryubuntu
ist und das Container-Image hat den kurzen Alias b
(für bionisch , der Codename von Ubuntu 18.04 LTS). -
Weitere Informationen zu einem Container-Image abrufen:
lxc image info ubuntu:b
Die Ausgabe zeigt die Details des Container-Images einschließlich aller verfügbaren Aliase. Für Ubuntu 18.04 LTS können wir entwederFingerprint: 5b72cf46f628b3d60f5d99af48633539b2916993c80fc5a2323d7d841f66afbe Size: 180.37MB Architecture: x86_64 Public: yes Timestamps: Created: 2019/04/24 00:00 UTC Uploaded: 2019/04/24 00:00 UTC Expires: 2023/04/26 00:00 UTC Last used: never Properties: release: bionic version: 18.04 architecture: amd64 label: release serial: 20190424 description: ubuntu 18.04 LTS amd64 (release) (20190424) os: ubuntu Aliases: - 18.04 - 18.04/amd64 - b - b/amd64 - bionic - bionic/amd64 - default - default/amd64 - lts - lts/amd64 - ubuntu - amd64 Cached: no Auto update: disabled
b
angeben (fürbionic
, der Codename von Ubuntu 18.04 LTS) oder ein anderer Alias. -
Starten Sie einen neuen Container mit dem Namen
mycontainer
:lxc launch ubuntu:18.04 mycontainer
Creating mycontainer Starting mycontainer
-
Überprüfen Sie die Liste der Container, um sicherzustellen, dass der neue Container ausgeführt wird:
lxc list
+-------------+---------+-----------------------+---------------------------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +-------------+---------+-----------------------+---------------------------+------------+-----------+ | mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0 | +-------------+---------+-----------------------+---------------------------+------------+-----------+
-
Führen Sie grundlegende Befehle in
mycontainer
aus :lxc exec mycontainer -- apt update lxc exec mycontainer -- apt upgrade
Hinweis Die Zeichen
--
denlxc
anweisen Befehl, keine weiteren Befehlszeilenparameter zu analysieren. -
Öffnen Sie eine Shell-Sitzung in
mycontainer
:lxc exec mycontainer -- sudo --login --user ubuntu
To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. [email protected]:~$
Hinweis
Die Ubuntu-Container-Images haben standardmäßig ein Nicht-Root-Konto mit dem Benutzernamen
ubuntu
. Dieses Konto kannsudo
verwenden und erfordert kein Passwort, um administrative Aufgaben auszuführen.Das
sudo
Der Befehl stellt eine Anmeldung für das vorhandene Kontoubuntu
bereit . -
Zeigen Sie die Containerprotokolle an:
lxc info mycontainer --show-log
-
Beenden Sie den Container:
lxc stop mycontainer
-
Container entfernen:
lxc delete mycontainer
Hinweis Ein Container muss gestoppt werden, bevor er gelöscht werden kann.
Fehlerbehebung
Fehler „unix.socket:connect:Verbindung abgelehnt“
Wenn Sie lxc
ausführen Befehl erhalten Sie die folgende Fehlermeldung:
lxc list
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: connection refused
Dies geschieht, wenn der LXD-Dienst derzeit nicht ausgeführt wird. Standardmäßig wird der LXD-Dienst ausgeführt, sobald er erfolgreich konfiguriert wurde. Siehe LXD initialisieren, um LXD zu konfigurieren.
Fehler „unix.socket:connect:Erlaubnis verweigert“
Wenn Sie lxc
ausführen Befehl erhalten Sie die folgende Fehlermeldung:
lxc list
Error: Get http://unix.socket/1.0: dial unix /var/snap/lxd/common/lxd/unix.socket: connect: permission denied
Dies geschieht, wenn Ihr eingeschränktes Benutzerkonto kein Mitglied des lxd
ist Gruppe, oder Sie haben sich nicht ab- und wieder angemeldet, damit die neue Gruppenzugehörigkeit zum lxd
Gruppe wird aktualisiert.
Wenn Ihr Benutzerkonto ubuntu
ist , zeigt der folgende Befehl, ob Sie Mitglied des lxd
sind Gruppe:
groups ubuntu
ubuntu : ubuntu sudo lxd
In diesem Beispiel sind wir Mitglieder von lxd
Gruppe und wir müssen uns nur abmelden und wieder anmelden. Wenn Sie kein Mitglied der lxd
sind Gruppe finden Sie unter Initialisieren von LXD, wie Sie Ihr eingeschränktes Konto zu einem Mitglied von lxd
machen Gruppe.
Nächste Schritte
Wenn Sie eine einzelne Website verwenden möchten, reicht ein einzelnes Proxy-Gerät zum Website-Container aus. Wenn Sie mehrere Websites verwenden möchten, können Sie virtuelle Hosts im Website-Container installieren. Wenn Sie stattdessen mehrere Websites in einem eigenen Container einrichten möchten, müssen Sie einen Reverse-Proxy in einem Container einrichten. In diesem Fall würde das Proxy-Gerät zum Reverse-Proxy-Container leiten, um die Verbindungen zu den einzelnen Website-Containern zu leiten.
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Was sind Snap-Pakete
- Snapd installieren
- LXD-Einführung
- Blog-Post-Reihe zu LXD 2.0
- LXD-Support-Community
- Testen Sie LXD Online
- NGINX-Reverse-Proxy-Einstellungen