Installation und Verwendung von Podman zum Ausführen von Containern unter Rocky Linux 8
Podman ist eine freie und quelloffene Container-Plattform zur Entwicklung, Verwaltung und Bereitstellung von Containern und Pods in Linux-Umgebungen. Redhat hat Podman im Jahr 2018 entwickelt. Es ist eine Containerisierungs-Engine, die anders funktioniert als Docker. Podman ist nicht auf einen Daemon angewiesen, um zu funktionieren, im Gegensatz zu Docker, das Docker CLI und Docker Daemon verwendet. Die Abhängigkeit von einem Daemon führt zu einem Single Point of Failure.
Podman wurde nach den Standards der OCI (Open Container Initiative) entwickelt, die es Podman ermöglichen, direkt mit dem Kernel, Containern und Images zu interagieren. Außerdem ist es sicherer als Docker, da es keinen Root-Zugriff erfordert. Podman kann als direkter Ersatz für Docker verwendet werden, da beide OCI-konform sind.
In diesem Artikel erfährst du, wie du Podman installierst und zum Erstellen und Verwalten von Images und Containern verwendest.
Voraussetzungen
- Ein Rocky Linux basierter Server
- Ein Nicht-Sudo-Benutzer mit Root-Rechten.
- Stelle sicher, dass der Server auf dem neuesten Stand ist.
$ sudo dnf update
Podman installieren
Podman ist zusammen mit Buildah und Skopeo in dem Modul container-tools
enthalten. Es ist auch im AppStream Repository für Rocky Linux 8 verfügbar. Wir werden die Modulmethode verwenden.
Installiere Podman mit dem Befehl dnf module
.
$ sudo dnf module install container-tools
Überprüfe die Version von Podman, um zu sehen, ob er richtig installiert ist.
$ podman --version podman version 3.2.3
Container-Images suchen und herunterladen
Um nach dem Image von Nginx zu suchen, verwende den folgenden Befehl.
$ podman search nginx
In der Ausgabe siehst du den Namen der Registry, aus der das Image stammt, und eine Beschreibung der Images.
Um das Image herunterzuladen, verwende einen der folgenden Befehle.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Du kannst die heruntergeladenen Images mit dem folgenden Befehl anzeigen.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Ausführen von Containern
Verwende den folgenden Befehl, um einen Container mit dem Nginx-Image zu starten. Wir haben den Container als Webserver bezeichnet.
$ podman run -d --name webserver nginx
Wir können das gleiche Image verwenden, um einen anderen Container mit einem anderen Namen zu starten.
$ podman run -d --name webserver2 nginx
Wir können eine unbegrenzte Anzahl von Containern mit demselben Image starten.
Container auflisten und stoppen
Um alle laufenden Container aufzulisten, verwende den folgenden Befehl.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Stoppe den laufenden Container.
$ podman stop webserver webserver
Überprüfe, ob er angehalten wurde.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Um alle Container, auch die gestoppten, aufzulisten, musst du das Flag -a
verwenden.
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Einen gestoppten Container starten
Verwende den folgenden Befehl, um einen gestoppten Container zu starten.
$ podman start webserver webserver
Überprüfe, ob er gestartet ist.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Container löschen
Du musst einen Container stoppen, bevor du ihn löschen kannst.
$ podman stop webserver2
Lösche den Container.
$ podman rm webserver2
Du kannst einen laufenden Container löschen, indem du das Flag --force
verwendest.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Container löschen
Das Anhalten und das Töten eines Containers sind zwei verschiedene Dinge, die letztendlich das Gleiche bewirken. Der Unterschied besteht darin, dass das Anhalten eines Containers ihn auf sanfte Weise beendet, während das Töten eines Containers ihn gewaltsam beendet, was zu Datenverlust führt.
Verwende den folgenden Befehl, um den Container zu beenden.
$ podman kill -s 9 webserver2
Der obige Befehl verwendet die Option SIGNAL 9 (SIGKILL)
, um den Container zu beenden.
Um alle Container zu löschen, verwende die Option --all
oder -a
und um nur den letzten Container zu löschen, verwende die Option --latest
oder -l
.
Bild löschen
Du kannst die Bilder mit dem Befehl rmi
löschen.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Du kannst mehrere Images löschen, indem du sie durch Kommas trennst.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Um alle Images auf deinem System zu löschen, verwende die Flagge -a
.
$ podman rmi -a
Container-Logs anzeigen
Um die Containerprotokolle einzusehen, verwende den folgenden Befehl.
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
Du kannst die Logs mit der Option --tail
auf die letzten 5 Zeilen beschränken.
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
Standardmäßig werden keine Zeitstempel in den Protokollen angezeigt. Verwende die Option -t
, um Zeitstempel zu den Protokollen hinzuzufügen.
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
Container inspizieren
Wenn du einen Container inspizierst, werden die Informationen über den Container ausgedruckt.
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
Der Standardbefehl druckt eine lange Ausgabe im JSON-Format aus. Um die Ausgabe zu filtern, musst du die Option --format
verwenden. Um herauszufinden, wann der Container gestartet wurde, führe den folgenden Befehl aus.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Zugriff auf die Container-Shell
Mit der Option exec
kannst du auf die Shell-Eingabeaufforderung eines jeden Containers zugreifen.
$ podman exec -it webserver2 /bin/bash
Pods
Podman hat eine einzigartige Funktion, die Docker nicht hat. Podman kann Pods aus Containern erstellen, die zusammen arbeiten. So kannst du mehrere Container zusammen verwalten.
Um einen Pod zu erstellen, verwende den folgenden Befehl.
$ podman pod create --name mypod
Füge die Container zu dem neu erstellten Pod hinzu.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Jetzt kannst du Container mit einfachen einzeiligen Befehlen verwalten.
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
Fazit
Damit ist unser Tutorium über die Installation und Verwendung von Podman zum Ausführen von Containern abgeschlossen. Es gibt eine Menge Dinge, die du mit Podman machen kannst, die wir nicht behandelt haben. Wenn du Fragen hast, schreibe sie unten in die Kommentare.