Podman on RHEL: Native Container Runtime (Artikel 103)
Der definitive Guide zu Podman unter RHEL. Erfahren Sie alles über das Universal Base Image (UBI), die Verwaltung via Cockpit und die native Systemd-Integration.
# Podman on RHEL: Container im Red Hat Ökosystem
TL;DR / Management Summary In RHEL ist Podman nicht nur eine Alternative zu Docker, sondern die einzige offiziell unterstützte Container-Engine. Red Hat hat Docker aus den Repositories entfernt, um Platz für einen sichereren, Dämon-losen und Root-losen Ansatz zu machen. Das Herzstück der RHEL-Container-Strategie ist das UBI (Universal Base Image) – ein stabiles Image, das frei verteilt werden darf, aber vollen RHEL-Support genießt.
# 1. Einführung & Architektur
Kein Dämon, kein Risiko.
Podman in RHEL arbeitet eng mit dem Kernel (Namespaces/Cgroups v2) zusammen. Es gibt keinen zentralen Hintergrunddienst.
# Der RHEL Container Stack (Mermaid)
graph TD
A[Admin / App] --> B[Podman CLI]
B --> C[Kernel: Namespaces]
B --> D[Kernel: Cgroups v2]
B --> E[SELinux Policy: container_t]
F[Images: Red Hat Ecosystem / UBI] --> B
G[Registry: quay.io / registry.redhat.io] --> F
# 2. Universal Base Image (UBI): Das Fundament
Sicherheit vom Hersteller.
UBI ist ein abgespecktes RHEL, das Sie als Basis für Ihre Applikationen nutzen.
- Vorteil: Sie erhalten Sicherheits-Updates von Red Hat, auch wenn Ihre Applikation auf einem Nicht-RHEL-Host (z.B. Kubernetes in der Cloud) läuft.
# UBI nutzen
# Ziehen des kleinsten Images
podman pull registry.access.redhat.com/ubi9/ubi-minimal
# Applikation bauen (Dockerfile)
# FROM registry.access.redhat.com/ubi9/ubi:latest
# RUN dnf install -y python3 ...
# 3. Cockpit Integration: GUI für Container
Management im Browser.
In RHEL können Sie Container grafisch verwalten, was ideal für Junior-Admins oder schnelles Monitoring ist.
sudo dnf install cockpit-podman
sudo systemctl enable --now cockpit.socket
Rufen Sie https://<ip>:9090 auf und navigieren Sie zu “Podman Container”. Hier können Sie Images suchen, Container starten und Ressourcen-Limits setzen.
# 4. Day-2 Operations: Systemd-Integration (Modern)
Auto-Start ohne Dämon.
Podman nutzt Systemd, um Container als echte Dienste zu verwalten. Ab RHEL 9 nutzen wir den “Quadlet” Mechanismus oder den klassischen Generator.
# Der klassische Generator
# 1. Container erstellen
podman run -d --name web01 nginx
# 2. Service-File generieren
podman generate systemd --name web01 --new --files
# 3. Aktivieren
mv container-web01.service ~/.config/systemd/user/
systemctl --user enable --now container-web01.service
# 5. Troubleshooting & “War Stories”
Wenn die Registry streikt.
# Story 1: “Der Registry-Login-Fail”
Symptom: podman pull von registry.redhat.io schlägt mit “Unauthorized” fehl.
Ursache: Viele Red Hat Images sind nur für zahlende Kunden zugänglich.
Lösung: Nutzen Sie Ihren Red Hat Account:
podman login registry.redhat.io. Für freie Images nutzen Sie ubi-Präfixe.
# Story 2: “SELinux blockiert den Mount”
Symptom: Ein Container startet nicht, wenn ein Volume gemountet wird (Permission Denied).
Ursache: Das Verzeichnis auf dem Host hat nicht das richtige Label für Container-Zugriffe.
Lösung: Hängen Sie ein :Z (privat) oder :z (shared) an den Mount-Befehl an:
podman run -v /data:/mnt:Z .... Podman korrigiert dann das SELinux-Label automatisch.
# 6. Fazit & Empfehlung
- Migration: Ersetzen Sie Docker-Befehle durch Podman. Die Syntax ist identisch.
- Sicherheit: Nutzen Sie Rootless Container für alle Web-Apps. Nur Infrastruktur-Dienste (wie Load Balancer auf Port 80) sollten als Root laufen.
- Standard: Setzen Sie auf UBI als Basis für alle eigenen Images.
# Anhang: Cheatsheet
| Aufgabe | RHEL Befehl |
|---|---|
| Suche in RHEL Registry | podman search registry.redhat.io/ |
| Image Details sehen | podman inspect <id> |
| Alle Ressourcen-Stats | podman stats |
| Unbenutztes löschen | podman system prune |
| Cockpit Plugin Install | dnf install cockpit-podman |
| Log-Datei des Dämons | Existiert nicht (Check journalctl) |