Podman Compose on RHEL: Orchestration (Artikel 104)
Verwaltung von Multi-Container-Applikationen unter RHEL mit Podman Compose. Erfahren Sie den Umgang mit YAML-Stacks und die nativen Pod-Konzepte von Podman.
# Podman Compose: Stacks verwalten ohne Docker-Dämon
TL;DR / Management Summary Wer von Docker kommt, liebt die Einfachheit von
docker-compose.yml. In der RHEL-Welt nutzen wir Podman Compose, um diese YAML-Dateien zu verarbeiten. Der große Unterschied: Podman Compose übersetzt die Befehle in native Podman-Aufrufe, ohne einen Dämon zu benötigen. Zudem bietet Podman die einzigartige Möglichkeit, Container in Pods (ähnlich wie in Kubernetes) zusammenzufassen, was das Networking massiv vereinfacht.
# 1. Einführung & Konzepte
Compose trifft auf Pods.
Während Docker-Compose jeden Service in einen separaten Container steckt, kann Podman Services in einen gemeinsamen Pod bündeln. Alle Container in einem Pod teilen sich die gleiche IP (localhost).
# Der Workflow (Mermaid)
graph TD
A[docker-compose.yml] --> B[podman-compose CLI]
B -->|Option 1| C[Individual Containers]
B -->|Option 2| D[Single Pod with Multi-Containers]
C/D --> E[Kernel Namespaces]
# 2. Installation & Basis-Setup
Die Tools bereitstellen.
In RHEL ist podman-compose oft als Python-Tool oder via EPEL verfügbar.
# Installation
sudo dnf install epel-release
sudo dnf install podman-compose
# Ein Stack starten
Die Syntax ist identisch zu Docker:
# Im Verzeichnis mit der docker-compose.yml
podman-compose up -d
# 3. Kubernetes-Schnittstelle: Das Profi-Feature
Von Compose zu K8s.
Eines der mächtigsten Features von Podman in RHEL ist die Fähigkeit, aus laufenden Stacks Kubernetes-YAML zu generieren.
# Export nach Kubernetes
# Erstellt ein YAML, das direkt in OpenShift oder K8s geladen werden kann
podman generate kube <pod_name_oder_container> > myapp-k8s.yaml
# Import von Kubernetes YAML
Sie können K8s-Files direkt mit Podman ausführen, ohne ein Cluster zu haben:
podman play kube myapp-k8s.yaml
# 4. Day-2 Operations: Logging & Persistence
Den Stack warten.
# Logs aller Services
podman-compose logs -f
# Volumes in RHEL
Da Podman oft Rootless läuft, müssen Volumes im Home-Verzeichnis des Users liegen.
- Wichtig: Prüfen Sie die Berechtigungen mit
ls -lZdund nutzen Sie das:ZFlag für SELinux (siehe Artikel 103).
# 5. Troubleshooting & “War Stories”
Wenn der Stack nicht hochkommt.
# Story 1: “Der Networking-Mismatch”
Symptom: In der docker-compose.yml definierte Netzwerke werden von Podman-Compose nicht korrekt erstellt oder Container können sich nicht finden.
Ursache: podman-compose ist ein Wrapper und hat manchmal Probleme mit komplexen Netzwerk-Topologien (z.B. mehrere interne Netze).
Lösung: Nutzen Sie native Podman Pods. Erstellen Sie einen Pod und lassen Sie alle Container darin laufen. Sie erreichen sich dann einfach via localhost.
# Story 2: “User-Rechte bei Rootless-Compose”
Symptom: Port 80 im Compose-File schlägt fehl.
Ursache: Der User darf keine privilegierten Ports binden.
Lösung: Ändern Sie den Port in der YAML auf 8080:80 oder passen Sie den Kernel-Parameter ip_unprivileged_port_start an (siehe Artikel 039).
# 6. Fazit & Empfehlung
- Entwicklung: Nutzen Sie
podman-composefür die lokale Entwicklung, wenn Sie Docker-Compose Dateien gewohnt sind. - Produktion: Für den stabilen Betrieb auf RHEL-Servern empfehlen wir, den Stack nach Kubernetes-YAML zu migrieren (
generate kube) und viapodman play kubezu starten. Das ist deutlich robuster und zukunftssicherer. - Wahl: Wenn Sie echte Orchestrierung (Auto-Scaling, Multi-Host) brauchen, ist der nächste Schritt Red Hat OpenShift.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Stack starten | podman-compose up -d |
| Stack stoppen | podman-compose down |
| Laufende Pods sehen | podman pod ps |
| K8s YAML erzeugen | podman generate kube <name> |
| Alles löschen | podman system prune |
| Status der Container | podman-compose ps |