Podman ist eine kostenlose Open-Source-Containerplattform, die zum Entwickeln, Verwalten und Bereitstellen von Containern und Pods in einer Linux-Umgebung entwickelt wurde. 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 vom Daemon führt zu einem Single Point of Failure.
Podman wurde gemäß OCI-Standards (Open Container Initiative) entwickelt, die es Podman ermöglichen, direkt mit dem Kernel, Containern und Bildern zu interagieren. Es ist auch sicherer als Docker, da es keinen Root-Zugriff erfordert. Podman kann als direkter Ersatz für Docker verwendet werden, da beide OCI-konform sind.
Dieser Artikel zeigt Ihnen, wie Sie Podman installieren und zum Erstellen und Verwalten von Images und Containern verwenden.
Voraussetzungen
-
Ein Rocky Linux-basierter Server
-
Ein Nicht-Sudo-Benutzer mit Root-Rechten.
-
Stellen Sie sicher, dass der Server aktualisiert ist.
$ sudo dnf update
Podman installieren
Podman ist in den container-tools
enthalten Modul, zusammen mit Buildah und Skopeo. Es ist auch im AppStream-Repository für Rocky Linux 8 verfügbar. Wir werden die Modulmethode verwenden.
Installieren Sie Podman mit dem dnf module
Befehl.
$ sudo dnf module install container-tools
Überprüfen Sie die Version von Podman, um festzustellen, ob sie korrekt installiert ist.
$ podman --version podman version 3.2.3
Container-Images suchen und herunterladen
Verwenden Sie den folgenden Befehl, um nach dem Bild von Nginx zu suchen.
$ podman search nginx
In der Ausgabe sehen Sie den Namen der Registrierung, aus der das Image stammt, und eine Beschreibung der Images.
Um das Bild herunterzuladen, verwenden Sie einen der folgenden Befehle.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Sie können die heruntergeladenen Bilder mit dem folgenden Befehl anzeigen.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Container ausführen
Verwenden Sie den folgenden Befehl, um einen Container mit dem Nginx-Image auszuführen. Wir haben den Container als Webserver bezeichnet .
$ podman run -d --name webserver nginx
Wir können dasselbe 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
Verwenden Sie den folgenden Befehl, um alle laufenden Container aufzulisten.
$ 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
Stoppen Sie den laufenden Container.
$ podman stop webserver webserver
Überprüfen Sie, ob es gestoppt 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 aufzulisten, einschließlich der angehaltenen, müssen Sie -a
verwenden Flagge.
$ 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
Starte einen gestoppten Container
Verwenden Sie den folgenden Befehl, um einen angehaltenen Container zu starten.
$ podman start webserver webserver
Überprüfen Sie, ob es gestartet wurde.
$ 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
Sie müssen einen Container stoppen, bevor Sie ihn löschen können.
$ podman stop webserver2
Container löschen.
$ podman rm webserver2
Sie können einen laufenden Container löschen, indem Sie --force
verwenden Flagge.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Behälter töten
Das Stoppen und Töten eines Containers sind zwei verschiedene Dinge, die letztendlich dasselbe bewirken. Der Unterschied besteht darin, dass das Beenden eines Containers ihn ordnungsgemäß herunterfährt, während das Beenden eines Containers ihn zwangsweise beendet, was zu Datenverlust führt.
Verwenden Sie den folgenden Befehl, um den Container zu beenden.
$ podman kill -s 9 webserver2
Der obige Befehl verwendet das SIGNAL 9 (SIGKILL)
Option zum Beenden des Containers.
Um alle Container zu beenden, verwenden Sie --all
oder -a
verwenden Sie --latest
, um nur den neuesten Container zu löschen oder -l
Flagge.
Bild löschen
Sie können die Bilder mit rmi
löschen Befehl.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Sie können mehrere Bilder löschen, indem Sie sie durch Kommas trennen.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Um alle Bilder auf Ihrem System zu entfernen, verwenden Sie -a
Flagge.
$ podman rmi -a
Containerprotokolle anzeigen
Verwenden Sie den folgenden Befehl, um die Containerprotokolle anzuzeigen.
$ 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 ......
Sie können die Protokolle auf die letzten 5 Zeilen beschränken, indem Sie --tail
verwenden Option.
$ 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 erhalten Sie keine Zeitstempel in den Protokollen. Verwenden Sie das -t
Flag, um Ihren Protokollen Zeitstempel 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 .....
Inspizieren von Containern
Beim Überprüfen eines Containers werden die Informationen über einen Container gedruckt.
$ 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 gibt eine lange Ausgabe im JSON-Format aus. Um die Ausgabe zu filtern, müssen Sie das --format
verwenden Möglichkeit. Führen Sie den folgenden Befehl aus, um herauszufinden, wann der Container gestartet wurde.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Auf Container Shell zugreifen
Sie können auf die Shell-Eingabeaufforderung jedes Containers zugreifen, indem Sie exec
verwenden Option.
$ podman exec -it webserver2 /bin/bash
Pods
Podman hat eine einzigartige Funktion, die Docker fehlt. Podman kann Pods aus Containern erstellen, die zusammenarbeiten. Auf diese Weise können Sie mehrere Container zusammen verwalten.
Verwenden Sie zum Erstellen eines Pods den folgenden Befehl.
$ podman pod create --name mypod
Fügen Sie dem neu erstellten Pod die Container hinzu.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Sie können jetzt 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
Schlussfolgerung
Damit ist unser Tutorial zum Installieren und Verwenden von Podman zum Ausführen von Containern abgeschlossen. Es gibt viele Dinge, die Sie mit Podman tun können, die wir nicht behandelt haben. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.