Skip to content

Podman vs Docker

Kategorie: Container & Virtualisierung
Stand: Mai 2026


Übersicht

Podman und Docker sind beides Container-Runtimes, die OCI-kompatible Container bauen und ausführen können. Trotz kompatibler CLI unterscheiden sie sich grundlegend in Architektur, Sicherheitsmodell und Einsatzschwerpunkten.


Architektur

Docker

Docker basiert auf einem zentralen Daemon (dockerd), der als Root-Prozess im Hintergrund läuft. Alle Docker-Befehle (CLI, Compose, etc.) kommunizieren über eine Unix-Socket-Verbindung mit diesem Daemon.

docker CLI → dockerd (root daemon) → containerd → runc → Container

Podman

Podman ist daemonlos. Jeder Befehl startet den Container direkt als Kindprozess des aufrufenden Nutzers – ohne zentralen Dienst.

podman CLI → conmon → runc → Container

Vergleichsübersicht

Merkmal Docker Podman
Architektur Daemon-basiert Daemonlos
Standard-Rechte Root (via docker-Gruppe) Rootless out-of-the-box
Pods (wie K8s)
CLI-Kompatibilität De-facto Standard Docker-kompatibel
Compose-Support Docker Compose (nativ) Podman Compose / podman play kube
Systemd-Integration Umständlich Nativ (podman generate systemd)
Desktop GUI Docker Desktop Podman Desktop
Plattform Linux, macOS, Windows Linux (nativ), macOS/Windows (VM)
Lizenz Docker Desktop kostenpflichtig (Enterprise) Open Source (Apache 2.0)

Sicherheit

Docker – Risiken

  • Der Docker-Daemon läuft als root
  • Nutzer in der docker-Gruppe haben de facto Root-Zugriff auf das System
  • Ein kompromittierter Container kann leichter aus der Isolation ausbrechen
  • Angriffsfläche durch den permanent laufenden Daemon

Podman – Vorteile

  • Rootless Container standardmäßig: Container laufen mit den Rechten des aufrufenden Nutzers
  • Kein persistenter Daemon = keine permanente Root-Angriffsfläche
  • Bessere Isolation zwischen Nutzern auf einem System
  • SELinux-Integration auf RHEL/Fedora-Systemen
# Rootless Container starten – kein sudo nötig
podman run -it ubuntu bash

Pods

Podman unterstützt nativ das Konzept von Pods (wie in Kubernetes): mehrere Container teilen sich einen Netzwerk-Namespace.

# Pod erstellen
podman pod create --name mein-pod -p 8080:80

# Container zum Pod hinzufügen
podman run -d --pod mein-pod nginx
podman run -d --pod mein-pod my-sidecar

Docker kennt dieses Konzept nicht – dort wird es über Docker Compose/Networks abgebildet.


Systemd-Integration

Podman kann systemd-Unit-Files direkt generieren:

# Systemd-Service für einen Container generieren
podman generate systemd --name mein-container > ~/.config/systemd/user/mein-container.service

# Service aktivieren (ohne root)
systemctl --user enable --now mein-container

Kubernetes-Workflow

Podman bietet direkte Kubernetes-Kompatibilität:

# Kubernetes YAML aus laufenden Pods generieren
podman generate kube mein-pod > pod.yaml

# Kubernetes YAML direkt mit Podman ausführen
podman play kube pod.yaml

Migration von Docker zu Podman

Die CLIs sind weitgehend kompatibel. In vielen Fällen reicht ein Alias:

alias docker=podman

Bekannte Unterschiede

  • Docker Composepodman-compose oder podman play kube (nicht 100% kompatibel)
  • Build-Context kann bei komplexen Dockerfiles leicht abweichen
  • Netzwerk-Standard ist bei rootless Podman slirp4netns statt Bridge

Entscheidungshilfe

Docker wählen, wenn…

  • eine bestehende CI/CD-Pipeline auf Docker aufbaut
  • Docker Desktop auf macOS/Windows benötigt wird
  • das Team ausschließlich Docker-Erfahrung hat
  • spezifische Docker-Plugins oder BuildKit-Features gebraucht werden
  • schnelle Onboarding-Zeit wichtiger ist als Sicherheitsoptimierung

Podman wählen, wenn…

  • Sicherheit oberste Priorität hat (rootless, kein Daemon)
  • auf Linux-Servern gearbeitet wird (RHEL, Fedora, CentOS Stream)
  • systemd-Services aus Containern generiert werden sollen
  • Richtung Kubernetes migriert wird
  • eine regulierte Umgebung (Compliance, Enterprise) vorliegt
  • kein persistenter Hintergrunddienst erwünscht ist

Nützliche Befehle

# Images
podman pull nginx
podman images
podman rmi nginx

# Container
podman run -d -p 8080:80 --name web nginx
podman ps
podman ps -a
podman stop web
podman rm web

# Logs & Inspect
podman logs web
podman inspect web

# Build
podman build -t mein-image:1.0 .

# Systemd
podman generate systemd --name web --files --new