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

  1. Ein Rocky Linux basierter Server
  2. Ein Nicht-Sudo-Benutzer mit Root-Rechten.
  3. 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

Podman Search Image Result

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.

Das könnte dich auch interessieren …