linux-rhel-centos-fedora container podman compose orchestration rhel

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 -lZd und nutzen Sie das :Z Flag 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-compose fü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 via podman play kube zu 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