Podman als Docker-Alternative: Eine produktionsreife Anleitung
Podmans rootless, daemonless Architektur macht es zu einer überzeugenden Alternative zu Docker für sicherheitsbewusste Teams. Hier erfahren Sie, wie Sie nahtlos migrieren.
Docker hat verändert, wie wir Software bereitstellen. Podman möchte verändern, wie wir Container ausführen — ohne einen privilegierten Daemon, der zwischen Ihrer Anwendung und dem Kernel sitzt. Wenn Sie Container in Produktion auf Linux ausführen, lohnt es sich, Podman zu verstehen.
Warum Podman?
- Kein Daemon: jeder Container ist ein direkter Kindprozess des Benutzers, der ihn gestartet hat
- Standardmäßig rootless: Container laufen ohne Root-Privilegien auf dem Host
- OCI-konform: führt die gleichen Images wie Docker aus (von Docker Hub, GHCR oder jeder OCI-Registry)
- Drop-in-Docker-CLI-Kompatibilität: alias docker=podman und die meisten Skripte funktionieren einfach
- Native systemd-Integration: generieren Sie Unit-Dateien direkt aus Container-Definitionen
- Pod-Unterstützung: gruppieren Sie Container wie Kubernetes-Pods, ohne Kubernetes-Overhead
Installation
# Debian / Ubuntu
apt update && apt install -y podman
# RHEL / AlmaLinux / Rocky (bereits in den meisten RHEL-8+-Images enthalten)
dnf install -y podman
# Prüfen
podman version
podman infoErster Rootless-Container
# nginx ziehen und starten (rootless — kein sudo nötig)
podman run -d --name web -p 8080:80 docker.io/library/nginx:alpine
# Laufende Container anzeigen
podman ps
# Logs prüfen
podman logs web
# Stoppen und entfernen
podman stop web && podman rm webRootless-Container können nicht an Ports unter 1024 binden ohne Kernel-Capability-Anpassungen. Verwenden Sie Ports >= 1024 in der Entwicklung und einen nginx/HAProxy Reverse-Proxy in Produktion.
Migration von Docker Compose
Podman unterstützt Docker Compose-Dateien über podman-compose (Community-Projekt) oder das eingebaute Quadlet-System. Für Produktion ist Quadlet — das systemd Unit-Dateien aus Container-Definitionen generiert — der zuverlässigere Weg.
# podman-compose installieren (für Parität in der Entwicklung)
pip3 install podman-compose
# Vorhandene docker-compose.yml ausführen
podman-compose up -d
# Für Produktion: systemd-Units per Quadlet erzeugen
# Eine .container-Datei in ~/.config/containers/systemd/ ablegen
mkdir -p ~/.config/containers/systemd# ~/.config/containers/systemd/web.container
[Unit]
Description=Nginx web server
After=network-online.target
[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=/srv/www:/usr/share/nginx/html:ro,Z
[Service]
Restart=always
[Install]
WantedBy=default.target# systemd neu laden und Container-Unit starten
systemctl --user daemon-reload
systemctl --user enable --now web.service
systemctl --user status web.serviceSicherheitsaspekte
- Verwenden Sie :Z oder :z Volume-Mount-Labels, damit SELinux Container-Zugang zu Host-Pfaden erlaubt
- Führen Sie mit --security-opt no-new-privileges aus, um Privilegien-Eskalation innerhalb von Containern zu verhindern
- Setzen Sie --read-only auf dem Container-Dateisystem, wo möglich
- Geben Sie --user innerhalb des Containers an, um zu vermeiden, als UID 0 zu laufen, sogar innerhalb des Container-Namespaces
- Auditen Sie Images regelmäßig mit podman image scan oder trivy
Podman ist produktionsbereit und weit verbreitet, einschließlich in Red Hat OpenShift unter der Haube. Die Migration von Docker ist typischerweise ein halber Tag Aufwand für die meisten Stacks. Die Sicherheits- und operativen Vorteile — kein privilegierter Daemon, native systemd-Integration, rootless-Operation — machen es die Investition wert.