Podman on SUSE: The Docker Successor (Artikel 164)
Der Umstieg auf Podman unter SUSE. Erfahren Sie alles über Rootless-Container, die native Systemd-Integration und warum Podman der neue Standard für SLES-Systeme ist.
# Podman on SUSE: Sicherer Container-Betrieb ohne Dämon
TL;DR / Management Summary SUSE hat mit dem Release von SLES 15 SP3 den strategischen Wechsel von Docker zu Podman vollzogen. Podman bietet die gleiche Syntax wie Docker, benötigt aber keinen Root-Dämon und ermöglicht echte Rootless-Container. In Kombination mit dem SUSE-Standard-Dateisystem Btrfs bietet Podman eine hochperformante und extrem sichere Plattform für moderne Microservices.
# 1. Einführung & Architektur
Das Daemonless-Prinzip.
Im Gegensatz zu Docker ist Podman ein einfacher Fork-and-Exec Prozess. Er nutzt die Standard-Linux-Kernelfeatures (Namespaces, Cgroups v2) direkt.
# Der SUSE Container Stack (Mermaid)
graph TD
A[Admin User] --> B[Podman CLI]
B --> C[Kernel: Namespaces / Cgroups v2]
B --> D[Storage: Btrfs Driver]
D --> E[/var/lib/containers/storage]
B --> F[Rootless: User Namespace]
G[Registry: registry.suse.com] --> B
# 2. Installation & Modul-Aktivierung
Container-Tools bereitstellen.
In SLES sind Container-Werkzeuge in einem eigenen Modul gebündelt.
# Schritt 1: Modul aktivieren (Nur SLES)
sudo SUSEConnect -p sle-module-containers/15.5/x86_64
# Schritt 2: Installation
sudo zypper install podman
# 3. Rootless Podman auf SUSE
Sicherheit für jeden User.
SUSE konfiguriert Rootless-Support standardmäßig mit. Jeder Benutzer kann eigene Container starten, ohne sudo zu nutzen.
# Vorbereitung für den User
# Erlaubt dem User, Ports unter 1024 zu binden (Optional)
echo "net.ipv4.ip_unprivileged_port_start=80" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 4. Day-2 Operations: Systemd & Quadlets
Container als echte SUSE-Dienste.
Unter SUSE nutzen wir Quadlets (ab Podman 4.4), um Container-Konfigurationen direkt als Systemd-Units zu behandeln.
# Beispiel: Eine Quadlet-Datei (/etc/containers/systemd/myapp.container)
[Container]
Image=registry.suse.com/suse/sle15:latest
Exec=echo "Hello SUSE"
[Install]
WantedBy=multi-user.target
Nach einem systemctl daemon-reload erkennt SUSE den Container automatisch als Dienst myapp.service.
# 5. Troubleshooting & “War Stories”
Wenn die Abstraktion hinkt.
# Story 1: “Der Ghost-Image Effekt”
Symptom: podman images zeigt nichts an, obwohl der Disk-Platz belegt ist.
Ursache: Der Admin sucht als Root, aber der User hat die Images Rootless geladen. Podman trennt den Speicher strikt nach UIDs.
Lösung: Prüfen Sie immer, mit welchem User Sie arbeiten. Der Speicher für Rootless-Images liegt unter ~/.local/share/containers/storage.
# Story 2: “Btrfs Quota Hänger”
Symptom: Das Starten von Containern dauert plötzlich 30 Sekunden.
Ursache: Die Btrfs-Quota-Berechnung (qgroups) ist auf dem Storage-Pfad aktiv und verlangsamt das Erstellen von Snapshots für die Layer.
Lösung: Deaktivieren Sie Quotas für den Container-Speicherpfad, wenn die Performance kritisch ist:
sudo btrfs quota disable /var/lib/containers/storage.
# 6. Fazit & Empfehlung
- Migration: Nutzen Sie
alias docker=podman. Die meisten Skripte funktionieren sofort. - Security: Nutzen Sie Rootless für alle Applikationen. Es ist der größte Sicherheitsgewinn seit Jahren.
- Integration: Podman arbeitet perfekt mit dem SUSE Manager zusammen, um Container-Flotten zu überwachen.
# Anhang: Cheatsheet
| Aufgabe | SUSE / CLI Befehl |
|---|---|
| Image suchen | podman search suse |
| Container Status | podman ps -a |
| Image Details | podman inspect <id> |
| Alles aufräumen | podman system prune -a |
| In Container einloggen | podman exec -it <name> /bin/bash |
| K8s YAML erzeugen | podman generate kube <name> |
| Quadlet Reload | systemctl daemon-reload |