Grundlegende Containerverwaltung mit Podman
- WAS?
Container bieten eine schlanke Methode zur Virtualisierung, mit der mehrere virtuelle Umgebungen (Container) gleichzeitig auf einem einzigen Host ausgeführt werden können. Podman ist das Standardtool unter SLE Micro zum Verwalten der Container.
- WARUM?
Der Artikel enthält grundlegende Informationen zu Podman und erklärt, wie es zur Verwaltung von Containern verwendet werden kann.
- AUFWAND
Es dauert etwa 30 Minuten, um den Artikel zu lesen.
- ZIEL
Sie verstehen Podman, Container-Images und Container.
- ANFORDERUNGEN
Installierter Podman
1 Grundlagen zu Containern #
Container bieten eine schlanke Methode zur Virtualisierung, mit der mehrere virtuelle Umgebungen (Container) gleichzeitig auf einem einzigen Host ausgeführt werden können. Im Gegensatz zu Technologien wie Xen oder KVM, bei denen der Prozessor eine komplette Hardwareumgebung simuliert und ein Hypervisor virtuelle Maschinen steuert, bieten Container eine Virtualisierung auf Betriebssystemebene, bei der der Kernel die isolierten Container steuert.
Mit Containern ist es möglich, Anwendungen in eigenständigen Units zu isolieren.
Container bieten eine nahezu native Leistung. Je nach Laufzeit kann ein Container den Host-Kernel direkt verwenden und damit den Overhead minimieren.
Es ist möglich, Netzwerkschnittstellen zu steuern und Ressourcen innerhalb von Containern über Kernel-Kontrollgruppen anzuwenden.
Container laufen auf dem Kernel des Hostsystems, sodass sie keine anderen Kernel oder unterschiedliche Kernelversionen verwenden können.
Die Sicherheit von Containern hängt vom Hostsystem ab. Containerisierte Anwendungen können über AppArmor- oder SELinux-Profile gesichert werden. Das Sichern von Containern ist aufgrund der größeren Angriffsfläche schwieriger als das Sichern virtueller Maschinen.
2 Informationen zu Podman #
Podman ist der Kurzname für das Pod Manager Tool. Es handelt sich um eine daemonlose Container-Engine, mit der Sie Anwendungen mithilfe von Containern und Container-Images ausführen und bereitstellen können. Podman umfasst eine Kommandozeilenschnittstelle für die Verwaltung der Container.
Da Podman nicht über einen Daemon verfügt, ist eine Integration in systemd möglich. Dies ermöglicht die Steuerung von Containern über systemd-Units. Sie können diese Units für vorhandene Container erstellen und auch Units generieren, mit denen Container gestartet werden, wenn sie noch nicht im System vorhanden sind. Podman kann systemd in Containern ausführen.
Mit Podman können Sie Ihre Container in Pods organisieren. Pods verwenden dieselbe Netzwerkschnittstelle und dieselben Ressourcen. Ein typischer Anwendungsfall für die Organisation einer Gruppe von Containern in einem Pod ist ein Container, auf dem eine Datenbank ausgeführt wird, und ein Container mit einem Client, der auf die Datenbank zugreift.
2.1 Installation von Podman #
Podman ist standardmäßig in SLE Micro enthalten. Wenn Podman jedoch fehlt, können Sie ihn wie unten beschrieben installieren:
Führen Sie folgenden Befehl aus:
>
sudo
transactional-update pkg install podman*Starten Sie Ihr System neu, um in den neuen Snapshot zu booten.
3 Abrufen von Container-Images #
Zum Ausführen eines Containers benötigen Sie ein Image. Ein Image enthält alle Abhängigkeiten, die für die Ausführung einer Anwendung erforderlich sind. Sie können Images aus einer Image-Registrierung abrufen. Die verfügbaren Registrierungen sind in der Konfigurationsdatei /etc/containers/registries.conf
definiert. Wenn Sie eine lokale Image-Registrierung haben oder andere Registrierungen verwenden möchten, tragen Sie die Registrierungen in die Konfigurationsdatei ein.
SLE Micro umfasst keine Tools zum Erstellen benutzerdefinierter Images. Die einzige Möglichkeit, ein Image zu erhalten, besteht darin, das Image aus einer Image-Registrierung abzurufen.
Die openSUSE-Registrierung und Docker Hub sind in der Standardinstallation nicht konfiguriert. Wenn Sie die Container-Images von diesen Registrierungen herunterladen möchten, müssen Sie die Registrierungen wie folgt zur Datei /etc/containers/registries.conf
hinzufügen:
unqualified-search-registries = ["registry.suse.com", "registry.opensuse.org", "docker.io"]
Das Kommando podman pull
ruft ein Image aus einer Image-Registrierung ab. Die Syntax lautet wie folgt:
#
podman pull [OPTIONS]SOURCE
Als source kann ein Image ohne den Registrierungsnamen angegeben werden. In diesem Fall versucht Podman, das Image aus allen Registrierungen abzurufen, die in der Datei /etc/containers/registries.conf
konfiguriert sind. Das Standard-Image-Tag lautet latest
. Der Standardspeicherort der abgerufenen Images lautet /var/lib/containers/storage/overlay-images/
.
So rufen Sie alle zulässigen Optionen für das Kommando podman pull
ab:
#
podman pull --help
Wenn Sie mit Cockpit arbeiten, können Sie Images auch über das Menü
aus einer Image-Registrierung abrufen; klicken Sie hierzu auf .In Podman können Sie Images in einer Image-Registrierung oder in einer Registrierungsliste mit folgendem Kommando suchen:
#
podman search IMAGE_NAME
Alternativ können Sie mit dem skopeo-Tool Container-Images und Image-Repositorys verwalten. Weitere Informationen finden Sie im folgenden Abschnitt.
3.1 skopeo #
skopeo ist ein Kommandozeilenprogramm zum Verwalten, Überprüfen und Signieren von Container-Images und Image-Repositorys. skopeo ermöglicht Ihnen die Inspektion von Containern und Repositorys in Remote- und lokalen Container-Registrierungen und erleichtert auch das Kopieren von Container-Images zwischen verschiedenen Speicher-Backends.
skopeo arbeitet mit den folgenden Registrierungstypen:
- Container-Speicher:IMAGE_REFERENCE
Ein Image, das sich in einem lokalen Image-Speicher befindet.
- docker://IMAGE_REFERENCE
Ein Image in einer Registrierung.
skopeo bietet mehrere Kommandos zur Verwaltung von Images und Registrierungen:
-
inspect
Das Kommando ruft das Repository-Manifest ab und kann Ihnen Informationen wie Tags anzeigen, die für das angegebene Repository verfügbar sind, Bezeichnungen eines Container-Images, das Betriebssystem eines Images usw.
Das Kommando hat die folgende Syntax:
>
skopeo inspect REGISTRY_TYPEIMAGE_NAME
Es folgt ein Anwendungsbeispiel:
>
skopeo inspect docker://registry.suse.com/suse/pcp:latest
{ "Name": "registry.suse.com/suse/pcp", "Digest": "sha256:eee17c009fb8b05e5825a8c9658d972ab13a17541180bd7a1348fccc6e4fc77f", "RepoTags": [ "5", "5-12.54", "5-13.10", ... ], "Created": "2023-06-19T16:59:01.617731565Z", "DockerVersion": "20.10.23-ce", "Labels": { "com.suse.application.pcp.created": "2023-06-19T16:58:29.786850402Z", "com.suse.application.pcp.description": "Performance Co-Pilot (pcp) container image based on the SLE Base Container Image. This container image is not supported when using a container runtime other than podman.", ... ], "Architecture": "amd64", "Os": "linux", "Layers": [ "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e", "sha256:19793da49ce886a67aa62657dc24a105a26d63568ce27de241246bc6cc9bc008", "sha256:403f9ef6c98d4cf277caf3166ca4455817828e33c8b699237bb8eb24cb2b41bf" ], "LayersData": [ { "MIMEType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "Digest": "sha256:a05e4c4d1fc89c7f7aa60829b8631b64873df6041f627eb2b43524e9e010446e", "Size": 47291175, "Annotations": null }, ... ], "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-
copy
Mit dem Kommando können Sie Container-Images zwischen Registrierungen, Container-Speicher-Backends und lokalen Verzeichnissen kopieren.
Es folgt ein Anwendungsbeispiel:
>
skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory
-
delete
Zum Markieren eines Images zum späteren Entfernen durch den Garbage Collector der Registrierung.
>
skopeo delete docker://registry.example.com/example/pause:latest
-
sync
Zum Synchronisieren von Images zwischen Registrierungs-Repositorys und lokalen Verzeichnissen.
4 Arbeiten mit Containern #
4.1 Ausführen von Containern #
Nachdem Sie das Container-Image abgerufen haben, können Sie Container auf der Grundlage dieses Images erstellen. Mit dem Kommando podman run
können Sie eine Instanz des Image ausführen. Die Syntax für das Kommando lautet wie folgt:
#
podman run [OPTIONS] IMAGE [CONTAINER_NAME]
IMAGE wird im Format Transport:Pfad angegeben. Falls Transport nicht angegeben ist, wird standardmäßig docker
verwendet. Der Pfad kann auf eine bestimmte Image-Registrierung verweisen. Wird diese Angabe ausgelassen, sucht Podman das Image in den Registrierungen, die in der Datei /etc/containers/registries.conf
definiert sind. In diesem Beispiel wird ein Container mit dem Namen sles15
auf der Grundlage des sle15
-Image ausgeführt:
#
podman run registry.opensuse.org/suse/templates/images/sle-15-sp4/base/images/suse/sle15 sles15
Hier finden Sie eine Liste der häufig verwendeten Optionen. Eine vollständige Liste der verfügbaren Optionen erhalten Sie mit folgendem Kommando: podman run
--help
-
--detach, -d
Der Container wird im Hintergrund ausgeführt.
-
--env, -e=env
Bei dieser Option sind willkürliche Umgebungsvariablen zulässig, mit denen der Prozess innerhalb des Containers gestartet werden kann. Wenn eine Umgebungsvariable ohne Wert angegeben wird, überprüft Podman die Hostumgebung auf einen Wert und legt die Variable nur fest, wenn sie auf dem Host festgelegt ist.
-
--help
Gibt Hilfe für das Kommando
podman run
aus.--hostname=
Name,-h
Legt den Container-Hostnamen fest, der im Container verfügbar ist.
-
--pod=
Name Führt den Container in einem vorhandenen Pod aus. Zum Erstellen eines Pods stellen Sie dem Pod-Namen den Wert
new:
voran.-
--read-only
Hängt das Root-Dateisystem des Containers als Nur-Lese-Dateisystem ein.
-
--systemd=true|false|always
Führt den Container im systemd-Modus aus. Der Standardwert ist „true“.
4.2 Auflisten von Containern #
In Podman können Sie eine Liste aller ausgeführten Container mit dem Kommando podman ps
abrufen. Die allgemeine Syntax für das Kommando lautet:
#
podman ps [OPTIONS]
Kommandooptionen können die angezeigten Informationen ändern. Mit der Option --all
werden beispielsweise alle Container ausgegeben, die von Podman erstellt wurden (nicht nur die ausgeführten Container).
So erhalten Sie eine vollständige Liste der Optionen für podman ps
:
#
podman ps --help
4.3 Stoppen von Containern #
Wenn das Kommando podman run
erfolgreich abgeschlossen wurde, wurde ein neuer Container gestartet. Mit folgendem Kommando können Sie den Container stoppen:
#
podman stop [OPTIONS]CONTAINER
Sie können den Namen oder die Kennung eines einzelnen Containers angeben oder auch eine durch Leerzeichen getrennte Liste mit Containern. Das Kommando akzeptiert die folgenden Optionen:
-
--all, -a
Stoppt alle ausgeführten Container.
-
--latest, -l
Hier wird kein Containername angegeben, sondern der zuletzt erstellte Container gestoppt.
-
--time, -t=
Sekunden Wartezeit (in Sekunden), bevor das Stoppen des Containers erzwungen wird.
So rufen Sie alle zulässigen Optionen für das Kommando podman stop
ab:
#
podman stop --help
4.4 Starten von Containern #
Um bereits erstellte, jedoch gestoppte Container zu starten, verwenden Sie das Kommando podman start
. Die Syntax für das Kommando lautet wie folgt:
#
podman start [OPTIONS]CONTAINER
CONTAINER kann ein Containername oder eine Containerkennung sein.
Eine vollständige Liste der zulässigen Optionen für podman
start
erhalten Sie mit folgendem Kommando:
#
podman start --help
4.4.1 Übernehmen von geänderten Containern #
Sie können einen neuen Container mit bestimmten Attributen ausführen, die kein Bestandteil des ursprünglichen Images sind. Mit dem Kommando podman commit
können Sie den Container mit diesen Attributen als neues Image speichern:
#
podman commit [OPTIONS]CONTAINERIMAGE
CONTAINER ist ein Containername oder eine Containerkennung. IMAGE ist der Name des neuen Image. Wenn der Image-Name nicht mit einem Registrierungsnamen beginnt, wird der Wert localhost
verwendet.
4.5 Entfernen von Containern #
Sollen ein oder mehrere nicht verwendete Container vom Host entfernt werden, verwenden Sie das Kommando podman rm
wie folgt:
#
podman rm [OPTIONS]CONTAINER
CONTAINER kann ein Containername oder eine Containerkennung sein.
Das Kommando entfernt den angegebenen Container nicht, wenn der Container ausgeführt wird. Um einen ausgeführten Container zu entfernen, verwenden Sie die Option -f
.
So erhalten Sie eine vollständige Liste der Optionen für podman rm
:
#
podman rm --help
Sie können alle gestoppten Container mit einem einzigen Kommando vom Host löschen:
#
podman container prune
Stellen Sie sicher, dass jeder angehaltene Container entfernt werden soll, bevor Sie das Kommando ausführen, da Sie sonst möglicherweise Container entfernen, die noch verwendet werden und nur vorübergehend beendet wurden.
5 Arbeiten mit Pods #
Container können zu einem Pod gruppiert werden. Die Container im Pod teilen sich dann Netzwerk, PID und IPC-Namespace. Pods können mit podman pod
-Kommandos verwaltet werden. Dieser Abschnitt vermittelt einen Überblick über die Kommandos für die Verwaltung von Pods.
5.1 Erstellen von Pods #
Mit dem Kommando podman pod create
wird ein Pod erstellt. Die Syntax für das Kommando lautet:
#
podman pod create [OPTIONS]
Das Kommando gibt die Pod-ID aus. Standardmäßig werden die Pods nur erstellt, nicht jedoch gestartet. Zum Starten eines Pods können Sie einen Container im Pod ausführen oder die Anweisungen in Abschnitt 5.3, „Starten/Stoppen/Neustarten von Pods“ befolgen.
Wenn Sie keinen Pod-Namen mit der Option --name
angeben, weist Podman einen Standardnamen für den Pod zu.
Eine vollständige Liste der zulässigen Optionen erhalten Sie mit folgendem Kommando:
#
podman pod create --help
5.2 Auflisten von Pods #
So rufen Sie eine Liste mit allen Pods auf:
#
podman pod list
Die Ausgabe sieht wie folgt aus:
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 30fba506fecb upbeat_mcclintock Created 19 hours ago 1 4324f40c9651 976a83b4d88b nervous_feynman Running 19 hours ago 2 daa5732ecd02
Jeder Pod enthält den Container INFRA
; die Anzahl der Container in einem Pod ist daher immer größer als null.
5.3 Starten/Stoppen/Neustarten von Pods #
Nach dem Erstellen eines Pods müssen Sie ihn starten, da er sich nicht standardmäßig im Status running
befindet. In den Kommandos unten kann POD ein Pod-Name oder eine Pod-Kennung sein.
So starten Sie einen Pod:
#
podman pod start [OPTIONS]POD
So erhalten Sie eine vollständige Liste der zulässigen Optionen:
#
podman pod start --help
Zum Stoppen eines Pods verwenden Sie das Kommando podman pod stop
wie folgt:
#
podman pod stop POD
Zum Neustarten eines Pods verwenden Sie das Kommando podman pod restart
wie folgt:
#
podman pod restart POD
5.4 Verwalten von Containern in einem Pod #
Um einem Pod einen neuen Container hinzuzufügen, verwenden Sie das Kommando podman run
mit der Option --pod
. Die allgemeine Syntax des Kommandos lautet:
#
podman run [OPTIONS] --pod POD_NAME IMAGE
Ausführliche Informationen zum Kommando podman run
finden Sie in Abschnitt 4.1, „Ausführen von Containern“.
Mit dem Kommando podman start
ist es nicht möglich, einen Container in einem Pod zu starten, wenn der Container dem Pod nicht bei der ersten Ausführung des Containers hinzugefügt wurde.
Sie können einen Container nicht aus einem Pod entfernen und den Container laufen lassen, da der Container selbst vom Host entfernt wird.
Andere Aktionen wie Start, Neustart und Stopp können für bestimmte Container ausgeführt werden, ohne den Status des Pods zu beeinträchtigen.
5.5 Überwachen der Prozesse in Pods #
Um alle Container in allen Pods anzuzeigen, führen Sie folgendes Kommando aus:
#
podman ps -a --pod
Die Ausgabe des Kommandos sieht in etwa wie folgt aus:
CONTAINER ID IMAGE COMMAND CREATED STATUS [...] 4324f40c9651 k8s.gcr.io/pause:3.2 21 hours ago Created daa5732ecd02 k8s.gcr.io/pause:3.2 22 hours ago Up 3 hours ago e5c8e360c54b localhost/test:latest /bin/bash 3 days ago Exited (137) 3 days ago 82dad15828f7 localhost/opensuse/toolbox /bin/bash 3 days ago Exited (137) 3 days ago 1a23da456b6f docker.io/i386/ubuntu /bin/bash 4 days ago Exited (0) 6 hours ago df890193f651 localhost/opensuse/toolbox /bin/bash 4 days ago Created
Die ersten beiden Datensätze sind die INFRA
-Container der einzelnen Pods auf der Grundlage des Image k8s.gcr.io/pause:3.2
. Andere Container in der Ausgabe sind eigenständige Container, die nicht zu einem Pod gehören.
5.6 Entfernen von Pods #
Zum Entfernen von Pods haben Sie zwei Möglichkeiten. Mit dem Kommando podman pod
rm
können Sie einen oder mehrere Pods entfernen. Alternativ können Sie alle gestoppten Pods mit dem Kommando podman pod prune
entfernen.
Um einen oder mehrere Pods zu entfernen, führen Sie das Kommando podman pod
rm
wie folgt aus:
#
podman pod rm POD
POD kann ein Pod-Name oder eine Pod-Kennung sein.
Sollen alle aktuell gestoppten Pods entfernt werden, verwenden Sie das Kommando podman pod
prune
. Vergewissern Sie sich, dass die einzelnen gestoppten Pods tatsächlich entfernt werden sollen, bevor Sie das Kommando podman pod prune
ausführen. Ansonsten könnten Sie Pods entfernen, die noch in Gebrauch sind.
6 Rechtliche Hinweise #
Copyright © 2006–2024 SUSE LLC und Mitwirkende. Alle Rechte vorbehalten.
Es wird die Genehmigung erteilt, dieses Dokument unter den Bedingungen der GNU Free Documentation License, Version 1.2 oder (optional) Version 1.3 zu vervielfältigen, zu verbreiten und/oder zu verändern; die unveränderlichen Abschnitte hierbei sind der Urheberrechtshinweis und die Lizenzbedingungen. Eine Kopie dieser Lizenz (Version 1.2) finden Sie im Abschnitt „GNU Free Documentation License“.
Die SUSE Marken finden Sie im https://www.suse.com/company/legal/. Alle anderen Marken von Drittanbietern sind Besitz ihrer jeweiligen Eigentümer. Markensymbole (®, ™ usw.) kennzeichnen Marken von SUSE und ihren Tochtergesellschaften. Sternchen (*) kennzeichnen Marken von Drittanbietern.
Alle Informationen in diesem Buch wurden mit größter Sorgfalt zusammengestellt. Auch hierdurch kann jedoch keine hundertprozentige Richtigkeit gewährleistet werden. Weder SUSE LLC noch ihre Tochtergesellschaften noch die Autoren noch die Übersetzer können für mögliche Fehler und deren Folgen haftbar gemacht werden.