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.
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.
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.
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.
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„.
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.
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„.
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.
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.
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.