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.
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.
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.
Zeigen Sie die Details des LXD-Snap-Pakets
Installieren Sie
Sie können überprüfen, ob das Snap-Paket installiert wurde, indem Sie
Fügen Sie Ihren Nicht-Root-Unix-Benutzer zum
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:
Führen Sie
Sie werden während des Initialisierungsprozesses mehrmals dazu aufgefordert. Wählen Sie die Standardwerte für alle Optionen.
Dieser Abschnitt erstellt einen Container, installiert den Apache-Webserver und fügt die entsprechenden
Starten Sie einen neuen Container:
Aktualisieren Sie die Paketliste im Container.
Installieren Sie den Apache im LXD-Container.
Holen Sie sich eine Shell im LXD-Container.
Bearbeiten Sie die Standardwebseite für Apache, um einen Verweis darauf zu erstellen, dass sie in einem LXD-Container ausgeführt wird.
Ändern Sie die Zeile
Gehen Sie zurück zum Host. Wir haben alle notwendigen Änderungen am Container vorgenommen.
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.
Navigieren Sie von Ihrem lokalen Computer in einem Webbrowser zur öffentlichen IP-Adresse Ihres Linode. Sie sollten die Standard-Apache-Seite sehen:
Alle Container auflisten:
Alle verfügbaren Repositories von Container-Images auflisten:
Alle verfügbaren Container-Images aus einem Repository auflisten:
Weitere Informationen zu einem Container-Image abrufen:
Starten Sie einen neuen Container mit dem Namen
Überprüfen Sie die Liste der Container, um sicherzustellen, dass der neue Container ausgeführt wird:
Führen Sie grundlegende Befehle in
Öffnen Sie eine Shell-Sitzung in
Die Ubuntu-Container-Images haben standardmäßig ein Nicht-Root-Konto mit dem Benutzernamen
Das
Zeigen Sie die Containerprotokolle an:
Beenden Sie den Container:
Container entfernen:
Wenn Sie
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.
Wenn Sie
Dies geschieht, wenn Ihr eingeschränktes Benutzerkonto kein Mitglied des
Wenn Ihr Benutzerkonto
In diesem Beispiel sind wir Mitglieder von
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 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.
Festlegen einer statischen IP unter Ubuntu:Ein Leitfaden für Anfänger
So installieren Sie den Apache-Webserver unter Linux
So installieren Sie den Apache-Webserver unter Debian 11
So installieren Sie den Apache-Webserver unter Ubuntu 18.04
Wie optimiere ich den Apache-Webserver?
Anfängerleitfaden für Apache HTTP Server – Installation und Konfiguration
Was ist LXD?
Hinweis Der Einfachheit halber der Begriff Container wird in diesem Handbuch verwendet, um die Container des LXD-Systems zu beschreiben.
Bevor Sie beginnen
Konfigurieren Sie die Snap-Paketunterstützung
snap list
No snaps are installed yet. Try 'snap install hello-world'.
lxd
an . Die folgende Ausgabe zeigt, dass derzeit die neueste Version von LXD 3.12
ist im standardmäßigen stable
Kanal. Dieser Kanal wird häufig mit neuen Funktionen aktualisiert. Es gibt auch andere Kanäle wie 3.0/stable
Kanal, der die LTS LXD-Version (unterstützt zusammen mit Ubuntu 18.04, bis 2023) und den 2.0/stable
enthält Kanal (unterstützt zusammen mit Ubuntu 16.04, bis 2021). Wir werden die neueste Version von LXD aus dem standardmäßigen stable
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 -
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
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
lxd
hinzu Gruppe:sudo usermod -a -G lxd username
Hinweis Durch Hinzufügen des Nicht-Root-Unix-Benutzerkontos zu
lxd
Gruppe können Sie jeden lxc
ausführen Befehle ohne vorangestelltes sudo
. Ohne diesen Zusatz müssten Sie sudo
voranstellen zu jedem lxc
Befehl.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% /
lxd init
aus um LXD zu initialisieren:sudo lxd init
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
iptables
hinzu Regeln, um Post 80 aufzudecken.
lxc launch ubuntu:18.04 web
lxc exec web -- apt update
lxc exec web -- apt install apache2
lxc exec web -- sudo --user ubuntu --login
sudo nano /var/www/html/index.html
It works!
(Zeilennummer 224) zu It works inside a LXD container!
. Dann speichern und beenden.exit
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 .
Allgemeine LXD-Befehle
lxc list
To start your first container, try: lxc launch ubuntu:18.04
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
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. Die images
Das Repository enthält Container-Images einer großen Anzahl verschiedener Linux-Distributionen. Die ubuntu-daily
verfügt über tägliche Container-Images, die zu Testzwecken verwendet werden können. Die local
repository ist der LXD-Server, den wir gerade installiert haben. Es ist nicht öffentlich und kann zum Speichern Ihrer eigenen Container-Images verwendet werden. 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 Repository ubuntu
ist und das Container-Image hat den kurzen Alias b
(für bionisch , der Codename von Ubuntu 18.04 LTS). 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 entweder Fingerprint: 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ür bionic
, der Codename von Ubuntu 18.04 LTS) oder ein anderer Alias. mycontainer
: lxc launch ubuntu:18.04 mycontainer
Creating mycontainer
Starting mycontainer
lxc list
+-------------+---------+-----------------------+---------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------+---------+-----------------------+---------------------------+------------+-----------+
| mycontainer | RUNNING | 10.142.148.244 (eth0) | fde5:5d27:...:1371 (eth0) | PERSISTENT | 0 |
+-------------+---------+-----------------------+---------------------------+------------+-----------+
mycontainer
aus : lxc exec mycontainer -- apt update
lxc exec mycontainer -- apt upgrade
Hinweis Die Zeichen
--
den lxc
anweisen Befehl, keine weiteren Befehlszeilenparameter zu analysieren.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
ubuntu
. Dieses Konto kann sudo
verwenden und erfordert kein Passwort, um administrative Aufgaben auszuführen.sudo
Der Befehl stellt eine Anmeldung für das vorhandene Konto ubuntu
bereit . lxc info mycontainer --show-log
lxc stop mycontainer
lxc delete mycontainer
Hinweis Ein Container muss gestoppt werden, bevor er gelöscht werden kann.
Fehlerbehebung
Fehler „unix.socket:connect:Verbindung abgelehnt“
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
Fehler „unix.socket:connect:Erlaubnis verweigert“
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
lxd
ist Gruppe, oder Sie haben sich nicht ab- und wieder angemeldet, damit die neue Gruppenzugehörigkeit zum lxd
Gruppe wird aktualisiert.ubuntu
ist , zeigt der folgende Befehl, ob Sie Mitglied des lxd
sind Gruppe: groups ubuntu
ubuntu : ubuntu sudo lxd
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
Weitere Informationen