coldwa.st
Alle LeitfädenProgrammierungWebDatenWerkzeugeDatenbankenHaskellKonzepteCabal & BuildsToolchainCompilerPerformanceEditor & HLS

Programmierung · DevOps · Container

Docker vs Podman: welche Container-Engine, und wann?

Von ColdwastAktualisiert am 27. Juni 20269 Min. Lesezeit#docker#podman#container
3D-Render von drei identischen schwarzen Servereinheiten nebeneinander mit grünen Statuslichtern
Docker und Podman führen beide dieselben Container im OCI-Format aus — hier drei identische Servereinheiten. Die echten Unterschiede liegen darin, wie jedes Werkzeug diese Container startet und verwaltet, nicht in den Containern selbst.

Kurze Antwort: Docker und Podman erledigen dieselbe Kernaufgabe — Container bauen und ausführen — und nutzen dasselbe Image-Format, sodass ein mit dem einen gebautes Image auf dem anderen läuft. Der Hauptunterschied ist die Architektur: Docker führt Container über einen langlebigen zentralen Daemon (dockerd) aus, der typischerweise als root läuft, während Podman daemonlos und rootless by design ist und jeden Container als gewöhnlichen Kindprozess startet. Ihre Befehlszeilen sind nahe genug, dass alias docker=podman den Großteil des Alltags abdeckt. Wähle Podman, wenn du keinen root-Daemon und eine enge systemd-Integration willst; bleib bei Docker, wenn du auf Docker Desktop, einen ausgereiften Compose-Workflow oder ein größeres Ökosystem angewiesen bist.

Wenn du mit einem der beiden neu bist, hilft es, zuerst zu verstehen, was Docker und Container sind. Dieser Leitfaden setzt das voraus und konzentriert sich darauf, wie sich die beiden Engines unterscheiden.

Architektur: mit Daemon vs daemonlos

Docker nutzt ein Client-Server-Modell. Der docker-Befehl, den du eingibst, ist ein Client, der mit einem Hintergrunddienst spricht, dem Docker-Daemon (dockerd), der deine Container tatsächlich erstellt und ausführt. Dieser Daemon läuft dauerhaft und in der Standardkonfiguration als root. Das ist bequem — ein Dienst verwaltet alles — aber es ist auch ein einzelner privilegierter Prozess, dem alle Container auf dem Host gehören.

Podman geht einen anderen Weg. Es gibt keinen zentralen Daemon: Wenn du einen Container startest, forkt und exect Podman ihn direkt als Kindprozess deiner Shell, mit denselben Linux-Primitiven (Namespaces, cgroups). Jeder Container ist nur ein normaler Prozessbaum. Dieses daemonlose Modell bedeutet, dass es keinen ständig laufenden root-Dienst zum Kompromittieren gibt und ein Absturz in einem Container nicht durch einen gemeinsamen Daemon läuft.

Rootless-Container und Sicherheit

Dieser Architekturunterschied führt zum Sicherheitsunterschied, der den meisten am wichtigsten ist. Podman wurde dafür gebaut, rootless zu laufen — ein unprivilegierter Benutzer kann Container ohne root bauen und ausführen, indem User-Namespaces die Container-UIDs auf den Host abbilden. Docker kann ebenfalls rootless laufen und unterstützt das seit Jahren, aber seine Standardinstallation dreht sich weiter um den root-Daemon, sodass Rootless ein optionaler Modus statt die Grundlage ist.

Kein root-Daemon zu haben verkleinert die Angriffsfläche: Es gibt keinen privilegierten Hintergrunddienst, den ein Container-Ausbruch ins Visier nehmen könnte, um den Host zu übernehmen. Für Mehrbenutzer-Server und CI-Runner ist diese „kein root-Daemon“-Eigenschaft ein echter, konkreter Grund, zu Podman zu wechseln. Es ist keine Magie — Container brauchen weiterhin sorgfältige Konfiguration — aber die Standardhaltung ist konservativer.

Ein großes Containerschiff, beladen mit gestapelten Seecontainern, nachts in einem Hafen
Das Wort „Container“ stammt aus der Schifffahrt: standardisierte Boxen, die sich auf jedem Schiff oder Kran gleich bewegen. Software-Container übernehmen die Idee — und sowohl Docker als auch Podman nutzen denselben OCI-Standard, sodass die Boxen austauschbar sind.

Gleiche Images, nahezu identische CLI

Das ist der Teil, der den Wechsel schmerzlos macht: Beide Werkzeuge folgen den OCI-Standards (Open Container Initiative) für Images und Laufzeit. Ein mit Docker gebautes Image läuft unter Podman und umgekehrt, und beide ziehen aus denselben Registries (Docker Hub, GitHub Container Registry, Quay und weitere). Es gibt kein nur-Docker- oder nur-Podman-Image-Format.

Die Befehlszeilen sind bewusst ähnlich. podman run, podman build, podman ps und podman pull spiegeln ihre Docker-Pendants mit denselben gängigen Flags. Viele setzen einfach einen Alias:

alias docker=podman

und behalten ihre Gewohnheiten. Dockerfiles funktionieren unter Podman ebenfalls unverändert. Die CLI ist nicht in jedem Sonderfall zu 100 % identisch, aber für das tägliche Bauen und Ausführen ist sie nahe genug, dass das Muskelgedächtnis übertragbar ist.

Pods: Podmans Kubernetes-artige Gruppierung

Podman ist nach dem Pod benannt — einem Konzept, das es von Kubernetes übernimmt. Ein Pod ist eine Gruppe von Containern, die Ressourcen wie einen Netzwerk-Namespace teilen, sodass sie über localhost miteinander reden können, als wären sie auf derselben Maschine. Podman kann diese Pods direkt erstellen und verwalten, was die lokale Entwicklung näher daran bringt, wie Dinge in einem Kubernetes-Cluster laufen. Docker hat kein natives „Pod“-Primitiv im selben Sinne; Multi-Container-Aufbauten werden stattdessen mit Compose-Netzwerken zusammengestellt.

systemd-Integration

Da Podman-Container gewöhnliche Kindprozesse statt Kinder eines Daemons sind, fügen sie sich natürlich in systemd ein, den Dienstmanager von Linux. Historisch konntest du podman generate systemd ausführen, um eine Unit-Datei pro Container zu erzeugen; der aktuelle, empfohlene Ansatz ist Quadlet, mit dem du Container in deklarativen Dateien im Unit-Stil beschreibst, die systemd direkt verwaltet — sie beim Booten starten, bei Fehlern neu starten und wie jeden anderen Dienst verfolgen. Für Server, die ohnehin alles über systemd betreiben, ist das eine saubere Möglichkeit, Container ohne zusätzlichen Daemon unter denselben Supervisor zu stellen.

Compose: docker compose vs podman

Viele Projekte verlassen sich auf Compose, um mehrere Container aus einer YAML-Datei hochzufahren. Docker liefert docker compose (das Compose-v2-Plugin) als erstklassiges, gut gepflegtes Werkzeug. Podman unterstützt Compose-Workflows ebenfalls: Es kann mit dem separaten Werkzeug podman-compose arbeiten, und Podman stellt zudem einen Socket bereit, mit dem das Standard-Compose-Tooling reden kann, sodass bestehende compose.yaml-Dateien oft mit wenig oder keiner Änderung laufen. In der Praxis ist Dockers Compose-Erfahrung die ausgereiftere und ausgefeiltere der beiden, was ein Grund ist, warum Teams mit intensiver Compose-Nutzung manchmal bei Docker bleiben.

Docker-Desktop-Lizenz vs Podmans Open-Source-Modell

Unter Windows und macOS wird Docker meist über Docker Desktop genutzt. Docker Desktop ist kostenlos für private Nutzung, Bildung und kleine Unternehmen, erfordert aber für größere Organisationen (über der von Docker veröffentlichten Größenschwelle) ein kostenpflichtiges Abonnement. Diese Lizenzänderung ist für größere Firmen eine echte Budget- und Compliance-Frage.

Podman ist vollständig Open Source und kostenlos, ohne Lizenz pro Arbeitsplatz. Sein Desktop-Begleiter, Podman Desktop, ist ebenfalls Open Source. Für Organisationen, die eine kommerzielle Desktop-Lizenz vermeiden wollen — oder einfach einen durchgehenden Open-Source-Stack bevorzugen — zählt dieser Unterschied genauso wie jeder technische.

Welches solltest du also nutzen?

KriteriumDockerPodman
ArchitekturZentraler Daemon (dockerd)Daemonlos (fork/exec pro Container)
RootlessUnterstützt, optionalRootless by design (Standard)
Image-FormatOCIOCI — austauschbar mit Docker
CLIReferenz-CLINahezu identisch (alias docker=podman)
PodsKein natives Pod-PrimitivNative Pods (Kubernetes-Stil)
systemdLäuft unter dem DaemonNative Units via Quadlet
Composedocker compose (ausgereift)podman-compose / Compose via Socket
Desktop-LizenzDocker Desktop kostenpflichtig für große OrgsOpen Source, kostenlos (Podman Desktop)

Es gibt keinen universellen Sieger. Wähle Podman, wenn du keinen root-Daemon, rootless Container als Standard, eine native systemd/Quadlet-Verwaltung oder die Vermeidung der Docker-Desktop-Lizenz willst. Bleib bei Docker, wenn du auf Docker Desktop, einen ausgereiften Compose-Workflow oder die Breite seines Ökosystems und seiner Dokumentation angewiesen bist. Da beide OCI sprechen, kannst du sie auch mischen — mit dem einen bauen, mit dem anderen ausführen — oder Podman ausprobieren, ohne deine bestehenden Images und Dockerfiles wegzuwerfen. Und wenn du später viele Container über mehrere Maschinen orchestrieren musst, ist das eine Aufgabe für Kubernetes, das über beiden steht.