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:
>sudotransactional-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 --helpWenn 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_NAMEAlternativ 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_NAMEEs 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 runaus.--hostname=Name,-hLegt 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 --help4.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]CONTAINERSie 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 --help4.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]CONTAINERCONTAINER 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 --help4.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]CONTAINERIMAGECONTAINER 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]CONTAINERCONTAINER 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 --helpSie können alle gestoppten Container mit einem einzigen Kommando vom Host löschen:
# podman container pruneStellen 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 --help5.2 Auflisten von Pods #
So rufen Sie eine Liste mit allen Pods auf:
# podman pod listDie 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]PODSo 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 POD5.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 --podDie 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 PODPOD 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–2025 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.