linux-suse-opensuse container podman rootless sles opensuse

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