4 Minuten Lesezeit (783 Worte)

LXD und Linux-Container-Images

Allgemein gibt es einen deutlichen Unterschied zwischen Linux-Container-Images und Docker-Images: Docker verwendet ein Schichtenmodell, bei dem ein fertiges Applikationsimage aus mehreren Basisimages zusammengebaut wird, die sich wie Schichten übereinanderlegen. Ein LXC-Image ist immer ein komplettes Linux-Systemimage einer beliebigen Distribution, das dann vom Administrator an den jeweiligen Zweck angepasst werden muss. LXC-Images ähneln also eher den Images herkömmlicher virtueller Maschinen als den gelayerten Docker-Images.

Unter „purem" LXC wird ein Image in der Regel durch Nutzung eines Template erstellt, das aus einem bestehenden System mittels eines Bootstrapping-Prozesses ein fertiges Container-Image erstellt. Ein langwieriger Vorgang, der nicht immer wie gewünscht funktioniert und einiges an Vor- und Nacharbeiten erfordert. LXD [1] geht hier einen Schritt weiter und bietet ähnlich wie Docker mit dem Docker Hub die Möglichkeit, einfach und schnell fertige Basis-Images auf den lokalen Host herunterzuladen. Nach einer Installation von LXD sind bereits mehrere Image-Server als „Remotes" vorkonfiguriert: ubuntu, ubuntu-minimal und ubuntu-daily für Canonical's offizielle Ubuntu-Images, sowie ein Community-Server mit den Images gängiger Linux-Distributionen [2]. Dort finden sich dann Basis-Images sowohl von Standard-Distributionen wie CentOS, openSUSE, Fedora, Debian, etc., als auch von einigen Exoten wie den systemd-freien Distributionen Devuan und Void Linux, oder dem auf Pentests spezialisierten Kali Linux. Vordefinierte und spezialisierte Applikations-Images wie Webserver, Datenbanken, etc. sucht man dort allerdings vergebens, da dies nicht der Philosophie von LXD bzw. Linux-Containern im Allgemeinen entspricht. Es lassen sich aber auch problemlos alternative oder sogar eigene Image-Server einbinden, auf denen man dann natürlich auch spezialisierte Images ablegen kann.

Die folgenden Befehle wurden auf einem Fedora 34 getestet. Der Befehl lxc remote list zeigt die eingerichteten Image-Server auf (REMOTE):

[root@fedora ~]# lxc remote list
WARNING: cgroup v2 is not fully supported yet, proceeding with partial confinement
+-----------------+------------------------------------------+---------------+-------------+--------+--------+--------+
|      NAME       |                   URL                    |   PROTOCOL    |  AUTH TYPE  | PUBLIC | STATIC | GLOBAL |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+--------+
| images          | https://images.linuxcontainers.org       | simplestreams | none        | YES    | NO     | NO     |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+--------+
| local (current) | unix://                                  | lxd           | file access | NO     | YES    | NO     |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | simplestreams | none        | YES    | YES    | NO     |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | simplestreams | none        | YES    | YES    | NO     |
+-----------------+------------------------------------------+---------------+-------------+--------+--------+--------+ 

Mit lxc image list REMOTE: werden die auf dem REMOTE verfügbaren Images aufgelistet, also beispielsweise lxc image list ubuntu:. Hat man sich für ein Image entschieden, genügt ein einfaches lxc launch REMOTE:FINGERPRINT CONTAINER um das Image vom Server zu laden, daraus einen lokalen Container mit dem Namen CONTAINER zu erstellen und diesen sofort zu starten. Der erstellte Container kann dann bei Bedarf auch wieder mit lxc stop CONTAINER gestoppt und mit lxc delete CONTAINER gelöscht werden. Mit lxc list wird eine Liste der aktuellen Container angezeigt. Damit lässt sich bestätigen, ob der erstellte Container läuft. Beispiel:

[root@fedora ~]# lxc launch ubuntu:ffae848ee5a0 ubuntu20-x86-64
Creating ubuntu20-x86-64
Starting ubuntu20-x86-64

[root@fedora ~]# lxc list
+-----------------+---------+------+------+-----------+-----------+
|      NAME       |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+-----------------+---------+------+------+-----------+-----------+
| ubuntu20-x86-64 | RUNNING |      |      | CONTAINER | 0         |
+-----------------+---------+------+------+-----------+-----------+ 

Anders als bei Docker ist der neue Container nach der Fertigstellung nicht mehr von seinem Basis-Image abhängig. Das Image kann mit lxc image delete FINGERPRINT entfernt werden, sofern man daraus nicht einen weiteren Container erstellen will. Lokale Basis-Images werden übrigens auch nicht automatisch gelöscht, sobald der letzte darauf aufbauende Container zerstört wird. Die Pflege des Image-Pools obliegt hier dem Administrator. lxc image list local: listet die lokal vorliegenden Images auf:

# lxc image list local:
+-------+--------------+--------+-----------------------------------------------+--------------+-----------+----------+----
| ALIAS | FINGERPRINT  | PUBLIC |                  DESCRIPTION                  | ARCHITECTURE |   TYPE    |   SIZE   |    
+-------+--------------+--------+-----------------------------------------------+--------------+-----------+----------+----
|       | ff0327fce488 | no     | ubuntu 14.04 LTS armhf (release) (20160406)   | armv7l       | CONTAINER | 111.69MB | Sep 
+-------+--------------+--------+-----------------------------------------------+--------------+-----------+----------+----
|       | ffae848ee5a0 | no     | ubuntu 20.04 LTS amd64 (release) (20200529.1) | x86_64       | CONTAINER | 303.76MB | Sep 
+-------+--------------+--------+-----------------------------------------------+--------------+-----------+----------+---- 

Mit lxc image info FINGERPRINT lassen sich detaillierte Informationen zum Image anzeigen. Images lassen sich auch löschen, updaten, mit einem Alias versehen, etc. lxc image --help listet alle verfügbaren Befehlsoptionen auf.

Fazit

LXD kümmert sich automatisch um die Aktualisierung der lokal abgelegten Basis-Images. Bei jedem Start des Daemons und dann jeweils alle sechs Stunden prüft LXD, ob auf dem Server eine neue Version des Images vorhanden ist und aktualisiert bei Bedarf das lokale Image. Dieses Verhalten lässt sich konfigurieren, ebenso lassen sich mit lxc image refresh FINGERPRINT einzelne Images auch manuell updaten. Insgesamt bietet das Image-Handling von LXD gegenüber „purem" LXC deutliche Vorteile und Erleichterungen für den Administrator und braucht sich hinter dem „Docker‑Workflow" keineswegs verstecken.

{loadmoduleid 179}

Senior Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Donnerstag, 18. April 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie