Erste Schritte mit Podman (Docker Alternative) auf Rocky Linux

Podman ist ein Linux-natives Tool für die Bereitstellung von Anwendungen mit Open Container Initiative (OCI) Containern und Container-Images. Es unterstützt mehrere Container-Image-Formate, darunter Docker-Images und OCI-Container-Images. Außerdem unterstützt Podman die Verwaltung von Pods, Gruppen von Containern.

Podman ist ein daemonloses Tool, das als einzelnes binäres Kommandozeilenprogramm ohne Dienst läuft. Es bietet eine Befehlszeile ähnlich wie Docker, du kannst einen Alias wie „alias docker=podman“ verwenden.

Zum Ausführen von Containern und Verwalten von Container-Images setzt Podman auf libpod und OCI-Container-Laufzeiten wie runc, crun und runv.

Voraussetzungen

In dieser Anleitung erfährst du, wie du Podman auf dem Rocky Linux System installierst. Außerdem lernst du die grundlegende Verwendung von Podman für die Verwaltung von Containern und Container-Images kennen.

Bevor du beginnst, solltest du sicherstellen, dass du die folgenden Voraussetzungen erfüllst:

  • Betriebssystem: Rocky Linux 8.4 (Green Obsidian)
  • Root-Rechte: Um neue Pakete zu installieren und die Systemkonfiguration zu bearbeiten

Beginnen wir nun mit der Installation von Podman.

Installation von Podman unter Rocky Linux

Das Appstream-Repository von Rocky Linux stellt standardmäßig Podman-Pakete bereit.

1. Führe den folgenden DNF-Befehl aus, um Informationen über das Podman-Paket anzuzeigen.

sudo dnf info podman

Du wirst eine ähnliche Ausgabe wie unten sehen.

Last metadata expiration check: 0:07:09 ago on Tue 16 Nov 2021 09:30:27 AM UTC.
Available Packages
Name         : podman
Version      : 3.3.1
Release      : 9.module+el8.5.0+710+4c471e88
Architecture : x86_64
Size         : 12 M
Source       : podman-3.3.1-9.module+el8.5.0+710+4c471e88.src.rpm
Repository   : appstream
Summary      : Manage Pods, Containers and Container Images
URL          : https://podman.io/
License      : ASL 2.0 and GPLv3+
Description  : podman (Pod Manager) is a fully featured container engine that is a simple
             : daemonless tool.  podman provides a Docker-CLI comparable command line that
             : eases the transition from other container engines and allows the management of
             : pods, containers and images.  Simply put: alias docker=podman.
             : Most podman commands can be run as a regular user, without requiring
             : additional privileges.
             :
             : podman uses Buildah(1) internally to create container images.
             : Both tools share image (not container) storage, hence each can use or
             : manipulate images (but not containers) created by the other.
             :
             : Manage Pods, Containers and Container Images
             : podman Simple management tool for pods, containers and images

Das appstream Repository stellt die Podman-Paketversion„3.3.1“ bereit.

2. Installiere Podman mit dem unten stehenden DNF-Befehl.

sudo dnf install podman

Gib zur Bestätigung„y“ ein und drücke„Enter„, um die Installation fortzusetzen.

Podman Rocky Linux installieren

3. Wenn die Installation von Podman abgeschlossen ist, überprüfe sie mit dem folgenden Befehl.

podman version

Du wirst eine ähnliche Ausgabe wie unten sehen.

Version:      3.3.1
API Version:  3.3.1
Go Version:   go1.16.7
Built:        Wed Nov 10 01:48:06 2021
OS/Arch:      linux/amd64

Wichtige Podman-Konfiguration

Das Podman-Paket wird mit einigen Standardkonfigurationen geliefert, die sich im Verzeichnis „/etc/containers“ befinden.

Im Folgenden findest du einige Podman-Konfigurationen, die du kennen musst.

  • policy.json. Richtlinienkonfiguration für das Signieren von Bildern.
  • registries.conf. Liste der verfügbaren Container-Image-Registries wie Docker Registry, RHEL Container image registry und Fedora Container images registry.
  • storage.conf. Konfiguration des Standardspeichers für Podman. Beinhaltet Treiber, Speicherort, etc.
  • Verzeichnis registries.d/. Zusätzliche Konfiguration der Registries und Signierung der Images
  • Verzeichnis registries.conf.d/. Zusätzliche Konfiguration für Container-Images und Aliase.

Podman Verzeichnis Layout

Neuen Benutzer einrichten

In diesem Schritt erstellst du einen neuen Benutzer und überprüfst die Podman-Installation, indem du das Docker-Image„hello-world“ ausführst.

1. Führe den folgenden Befehl aus, um einen neuen Benutzer „johndoe“ hinzuzufügen.

useradd -m -s /bin/bash johndoe
passwd johndoe

Gib ein neues sicheres Passwort für den Benutzer„johndoe“ ein.

2. Melde dich mit folgendem Befehl als Benutzer „johndoe“ an.

su - johndoe

3. Führe nun den folgenden Befehl aus, um einen neuen Container mit dem Docker-Image„hello-world“ zu starten.

podman run hello-world

Du wirst die Ausgabe„Hello World“ sehen, was bedeutet, dass der Container läuft, aber jetzt beendet wurde.

? docker.io/library/hello-world:latest
Trying to pull docker.io/library/hello-world:latest...
Getting image source signatures
Copying blob 2db29710123e done
Copying config feb5d9fea6 done
Writing manifest to image destination
Storing signatures

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the „hello-world“ image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

4. Überprüfe den Status des Containers auf deinem System mit dem Podman-Befehl unten

podman ps -a

Du wirst sehen, dass der Container, der auf dem Docker-Image „hello-world“ basiert, den aktuellen Status „Exited“ hat.

CONTAINER ID  IMAGE                                 COMMAND     CREATED        STATUS                    PORTS       NAMES
cea9bbfeac4d  docker.io/library/hello-world:latest  /hello      6 minutes ago  Exited (0) 6 minutes ago              recursing_shaw

Grundlegende Verwendung von Podman

In diesem Schritt lernst du die grundlegende Verwendung von Podman für die Verwaltung von Containern und Container-Abbildern kennen.

Container-Abbilder suchen

1. Um Container-Images mit Podman zu finden, benutze den folgenden Befehl. In diesem Beispiel suchen wir nach Container-Images mit dem Namen„nginx„.

podman search nginx

Du wirst eine Vielzahl von Container-Images aus den verschiedenen Registern sehen.

2. Mit der Option „–limit n“ kannst du die Suchergebnisse der einzelnen Container-Images-Registraturen einschränken.

podman search nginx --limit 3

Jetzt siehst du in jeder Registry 3 Ergebnisse von Container-Images mit dem Namen„nginx„.

INDEX              NAME                                                DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
fedoraproject.org  registry.fedoraproject.org/f29/nginx                                                                 0
fedoraproject.org  registry.fedoraproject.org/f29/origin-nginx-router                                                   0
redhat.com         registry.access.redhat.com/ubi8/nginx-120           Platform for running nginx 1.20 or building ...  0
redhat.com         registry.access.redhat.com/ubi8/nginx-118           Platform for running nginx 1.18 or building ...  0
redhat.com         registry.access.redhat.com/rhscl/nginx-18-rhel7     Nginx 1.8 server and a reverse proxy server      0
centos.org         registry.centos.org/bamachrn/nginx-header                                                            0
centos.org         registry.centos.org/centos/nginx                                                                     0
centos.org         registry.centos.org/centos/nginx-110-centos7                                                         0
docker.io          docker.io/library/nginx                             Official build of Nginx.                         15839       [OK]
docker.io          docker.io/jwilder/nginx-proxy                       Automated Nginx reverse proxy for docker con...  2096                    [OK]
docker.io          docker.io/nginxinc/nginx-unprivileged               Unprivileged NGINX Dockerfiles                   54

Verwalten von Container-Images

Podman unterstützt das OCI- und das Docker-Image-Format. In diesem Schritt wirst du die Container-Images mit Podman verwalten.

1. Lade das Container-Image„nginx:alpine“ mit dem folgenden Befehl herunter.

podman pull nginx:alpine

Wähle die Container-Registry aus, die du verwenden möchtest, und bestätige mit„Enter„. Für dieses Beispiel werden wir die Docker-Registry verwenden.

? Please select an image:
    registry.fedoraproject.org/nginx:alpine
    registry.access.redhat.com/nginx:alpine
    registry.centos.org/nginx:alpine
  ? docker.io/library/nginx:alpine

Der Downloadvorgang beginnt.

? docker.io/library/nginx:alpine
Trying to pull docker.io/library/nginx:alpine...
Getting image source signatures
Copying blob a4e156412037 done
Copying blob a2402c2da473 done
Copying blob e0bae2ade5ec done
Copying blob 97518928ae5f done
Copying blob 3f3577460f48 done
Copying blob e362c27513c3 done
Copying config b46db85084 done
Writing manifest to image destination
Storing signatures
b46db85084b80a87b94cc930a74105b74763d0175e14f5913ea5b07c312870f8

2. Wenn der Download des Container-Images abgeschlossen ist, überprüfe die Downloader-Images mit dem folgenden Befehl.

podman images

Unten siehst du die ähnliche Ausgabe, die du erhalten wirst.

REPOSITORY                     TAG         IMAGE ID      CREATED      SIZE
docker.io/library/nginx        alpine      b46db85084b8  3 days ago   24.7 MB
docker.io/library/hello-world  latest      feb5d9fea6a5  7 weeks ago  19.9 kB

Container mit Podman starten

Nachdem du das Container-Image „nginx:alpine“ heruntergeladen hast, lernst du, wie du einen neuen Container mit Podman starten kannst.

1. Führe den folgenden Befehl aus, um den Container mit dem Image„nginx:alpine“ zu starten.

podman run -it --rm -d -p 8080:80 --name web nginx:alpine

Du erhältst den zufälligen String und die Nummer des Containers.

2. Überprüfe, ob der Container auf deinem System läuft, indem du den folgenden Befehl ausführst.

podman ps

Du wirst eine ähnliche Ausgabe wie unten sehen.

podman run container

Der Container mit dem Namen„web“ ist„Up“ und stellt den Port„8080“ auf dem Host-Rechner zur Verfügung.

3. Öffne nun deinen Webbrowser und gib die IP-Adresse von Rocky Linux in die Adresszeile ein. In diesem Beispiel hat der Rocky Linux Rechner die IP-Adresse„192.168.1.10„.

http://192.168.1.10:8080/

Du wirst die standardmäßige index.html des Containers„web“ sehen, der auf dem Container-Image„nginx:alpine“ basiert.

podman nginx container

Container-Logs mit Podman prüfen

Jetzt lernst du den Podman-Befehl zum Überprüfen der Container-Logs mit der Option„logs“ kennen.

1. Um die Logs des Containers zu prüfen, kannst du den folgenden Podman-Befehl verwenden.

podman logs web

Du wirst detaillierte Logs des Containers„web“ sehen.

2. Um die Ausgabe der Container-Logs zu begrenzen, verwende die Option„–tail n„.

podman logs --tail 10 web

Unten siehst du eine ähnliche Log-Ausgabe des Containers„web„.

podman Prüfprotokolle

Container mit Podman stoppen

1. Um den Container „web“ zu stoppen, verwende den unten stehenden Podman-Befehl.

podman stop web

Jetzt wird der Container„web“ gestoppt.

2. Überprüfe ihn mit dem folgenden Befehl.

podman ps
podman ps -a

Du wirst sehen, dass der Container „web“ automatisch gelöscht wird, weil du die Option„–rm“ verwendest, wenn du den Container startest.

podman stop container

Benutzerdefiniertes Volumen mit Podman einrichten

In diesem Schritt lernst du, wie du Volumes mit Podman verwalten kannst.

1. Erstelle ein neues Verzeichnis „data“ und die benutzerdefinierte Datei „index.html“. Diese wird die standardmäßige Nginx-Datei „index.html“ im Nginx-Container ersetzen.

mkdir -p ~/data/
nano ~/data/inde.html

Kopiere das folgende HTML-Skript und füge es ein.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome to Container Nginx</title>
</head>
<body>
  <h2>Hello from Nginx container - Managed with Podman</h2>
</body>
</html>

Speichere das Skript und beende es.

2. Als Nächstes führst du den folgenden Befehl aus, um einen neuen Container mit einem benutzerdefinierten Volumen zu erstellen.

podman run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

Verwende die Option„-v data:/usr/share/nginx/html„, um ein benutzerdefiniertes Volume für deinen neuen Container zu erstellen. Das Verzeichnis„data“ wird in das Containerverzeichnis„/usr/share/nginx/html“ eingebunden.

3. Überprüfe die laufenden Container mit dem unten stehenden Podman-Befehl.

podman ps

Der neue Container namens„web“ ist mit dem benutzerdefinierten Volume„Up„.

podman custom volume

4. Öffne deinen Webbrowser und gib die IP-Adresse des Servers mit dem Port„8080“ ein.

http://192.168.1.10:8080/

Jetzt siehst du die benutzerdefinierte „index.html“-Seite wie unten.

Ngix Container benutzerdefiniertes Volumen podman

SSH zum laufenden Container

In diesem Schritt greifst du auf die Shell des laufenden Containers zu.

1. Um dich in den laufenden Container einzuloggen, benutze Podman mit der Option „exec“ (siehe unten).

podman exec -it web /bin/sh

2. Nachdem du dich in den Container eingeloggt hast, überprüfe den Hostnamen, die IP-Adresse und die Routing-Tabelle des Containers.

hostname

ip a
route -n

Gib nun „exit“ ein und drücke„Enter„, um dich aus dem Container abzumelden.

Podman SSH zum Container

Umgebung bereinigen

Im letzten Schritt wirst du deine Umgebung aufräumen.

1. Beende den Container„web“ mit dem folgenden Befehl.

podman stop web

2. Entferne als Nächstes alle Container mit dem Status„Beendet“ mit dem unten stehenden Podman-Befehl.

podman rm $(podman ps --filter "status=exited" -q)

Damit hast du die grundlegende Verwendung von Podman zur Verwaltung von Containern und Container-Images abgeschlossen.

Fazit

Herzlichen Glückwunsch! Du hast Podman erfolgreich auf dem Rocky Linux System installiert. Außerdem hast du die grundlegenden Funktionen von Podman für die Verwaltung von Containern und Container-Images kennengelernt.

Im nächsten Schritt möchtest du vielleicht eigene Container-Images erstellen, die auf dem Docker-Image-Format oder der OCI-Container-Image-Spezifikation basieren.

Das könnte dich auch interessieren …