Podman vs. Docker: Welches soll man wählen?

Wenn Sie sich mit der Welt der Virtualisierung und Containerisierung beschäftigen, sind Sie wahrscheinlich Podman und Docker begegnet und fragen sich vielleicht, wie sie sich voneinander unterscheiden.

In diesem Beitrag werden wir die Unterschiede zwischen Docker und Podman untersuchen und versuchen herauszufinden, welches die richtige Wahl für Sie ist!

Docker

Docker ist eine Containerisierungstechnologie, die das Abhängigkeitsmanagement innerhalb eines Projekts auf allen Ebenen (Entwicklung und Bereitstellung) erleichtert.

Der unter Linux, Windows und Mac OS verfügbare Mechanismus von Docker konzentriert sich auf Container und ihre Orchestrierung, und hier unterscheidet sich die Containerisierung von der Virtualisierung.

Docker hat zwei Hauptbausteine: Docker CLI und Docker Daemon.

Docker-Daemon:

Es ist ein ständiger Hintergrundprozess, der dabei hilft, Docker-Images, Container, Netzwerke und Speichervolumes zu verwalten. Docker verwendet seine Docker-Engine-REST-API, um mit dem Docker-Daemon zu interagieren, auf den über das HTTP-Protokoll zugegriffen wird.

Docker-CLI:

Bildnachweis: Redhat

Es ist der Docker-Befehlszeilenclient für die Interaktion mit dem Docker-Daemon. Es ist das, was Sie verwenden, wenn Sie einen beliebigen Docker-Befehl ausführen.

Die Funktionsweise von Docker basiert auf dem Linux-Kernel und den Funktionen dieses Kernels wie Cgroups und Namespaces. Diese Funktionen trennen die Prozesse, sodass sie unabhängig voneinander ausgeführt werden können, da der Zweck von Containern darin besteht, mehrere Prozesse und Anwendungen separat auszuführen.

Dadurch ist es möglich, die Nutzung der Infrastruktur zu optimieren, ohne das Sicherheitsniveau gegenüber den Einzelsystemen zu reduzieren.

Alle Container-Tools wie Docker verfügen über ein Image-basiertes Bereitstellungsmodell. Dieses Modell vereinfacht die gemeinsame Nutzung einer Anwendung oder eines Satzes von Diensten über mehrere Umgebungen hinweg.

Darüber hinaus hilft Docker dabei, die Bereitstellung von Anwendungen innerhalb einer Containerumgebung zu automatisieren. Mit diesen verschiedenen Tools erhalten Benutzer vollen Zugriff auf Anwendungen und können die Bereitstellung beschleunigen, Versionen kontrollieren und sie zuweisen.

Podman

Podman (der POD MANager ) erstellt, betreibt und verwaltet OCI-Container und Container-Images. Es wurde von Red Hat entwickelt und war ursprünglich für dessen Enterprise-Linux 8 gedacht. Es dient der Containerverwaltung und fungiert als offizieller Nachfolger von Docker.

Red Hat stellte daraufhin die Unterstützung für Docker ein, versicherte aber, dass der Wechsel für die Nutzer einfach sei, da Podman auf Docker basiere, obwohl es ursprünglich nur als Debugging-Tool gedacht war.

  So öffnen Sie DWG-Dateien auf Ihrem Laptop

Es verwaltet das gesamte Container-Ökosystem mithilfe der libpod-Bibliothek. Da Podman nur auf Linux-Plattformen funktioniert, befinden sich derzeit eine REST-API und Clients in der Entwicklung, damit Mac- und Windows-Systeme den Dienst aufrufen können.

Derzeit gibt es jedoch einen Varlink-basierten Remote-Client, der auf Mac- oder Windows-Plattformen funktioniert und eine Remote-Kommunikation mit einem Linux-basierten Podman-Server ermöglicht. Die libpod-Bibliothek unterstützt mehrere Methoden zum sicheren Hochladen von Bildern, einschließlich Vertrauen und Bildüberprüfung.

Es unterstützt auch Pods zum gemeinsamen Verwalten von Containergruppen und mehrere Bildformate, einschließlich OCI- und Docker-Bildformate.

In sehr kleinen und überschaubaren Umgebungen kann Podman sogar als Vorläufer von Kubernetes dienen. Es schließt die Lücke zwischen der singulären Verwaltung einzelner Instanzen aus den Anfangsjahren des Container-Hypes und der modernen Orchestrierung mit Kubernetes.

Ambitionierte Containernutzer können mit den Pods bereits das nächste Level genießen. Der Aufbau und Betrieb eines Kubernetes-Clusters entfällt. Im einfachsten Fall können neu konzipierte Pods in einzelnen Arbeitsgängen getestet und verbessert werden. Auch eine nachträgliche Übertragung auf Kubernetes ist möglich.

Der Befehl podman generate kube liefert die entsprechenden Konfigurationsdateien. Diese dienen dann eins zu eins als Input für das Kubernetes-Tool kubectl.

Aktuelle Versionen von Podman können sogar Konfigurationsdateien für systemd erstellen – ein Leckerbissen für alle, die den allgegenwärtigen Init-Nachfolger für die Container-Orchestrierung verwenden.

Podman vs. Docker: Unterschiede

Docker hat sich schnell als Steckenpferd für die Verwaltung von Containern etabliert. Allerdings hat Docker viele Vorteile und vor allem das schnell wachsende Repertoire an Images, sowie Nachteile und mögliche Sicherheitsrisiken. Außerdem wird Docker nicht mehr als Container für Kubernetes unterstützt.

Dass Container im Gegensatz zu virtuellen Systemen keinen Kernel benötigen, wird meist als einer der großen Vorteile angesehen. Bei Docker stellt es jedoch ein großes Sicherheitsrisiko dar, da Docker-Container nur mit Root-Rechten ausgeführt werden können.

Es ermöglicht in den Containern laufenden Prozessen, mit Root-Rechten auf den Kernel zuzugreifen und so das Hostsystem anzugreifen.

Der erste Unterschied ist offensichtlich, wenn Sie es zum ersten Mal verwenden. Während für Docker zunächst der Docker-Daemon gestartet werden muss, kann ein Podman-Container direkt von der Kommandozeile aus gestartet werden. Es gibt also keinen Hintergrundprozess und die Anwendung wird nur bei Bedarf ausgeführt.

Aus Sicherheitssicht ist das gut, denn Podman ist weniger anfällig für Angriffe, wenn der Daemon nicht rund um die Uhr mit Superuser-Rechten laufen muss. Podman benötigt aufgrund der Architektur, die sich grundlegend von Docker unterscheidet, keinen Hintergrundprozess.

  So ermitteln Sie die Kosten eines Skype-Anrufs

Während Docker dem Client-Server-Modell folgt, bei dem der Docker-Client über eine API mit dem Docker-Daemon kommuniziert, folgt Podman dem Fork-Exec-Modell. Jeder Container wird als untergeordneter Prozess von Podman ausgeführt.

Ein Benutzernamensraum wird bei der ersten Verwendung erstellt, wenn Podman mit normalen Benutzerrechten ausgeführt wird. Im Benutzernamensraum läuft Podman mit Root-Rechten und hat die Rechte, Dateisysteme zu mounten und Container zu erstellen.

Dementsprechend hat der Podman-Container nur die Rechte, die der ausführende Benutzer hat. Die Verwendung von Benutzernamensräumen bedeutet, dass jeder Benutzer seine eigenen Container erstellen und verwalten kann, diese jedoch für andere Benutzer und den Superuser nicht sichtbar sind.

Da Podman unabhängig von Docker betrieben wird, haben die Entwickler viel Spielraum und können auf die Wünsche der Community eingehen. Zu den interessanten Ergänzungen von Podman gehören der Mount/Unmount-Befehl und die systemd-Integration.

Mit dem Befehl mount/unmount kann der Host das Dateisystem des Containers mounten, um beispielsweise auf Dateien zuzugreifen oder diese zu ändern, und sie anschließend wieder unmounten.

Während die Überwachung der Container mit Systemd aufgrund des Daemons in Docker mit Podman nicht funktioniert, können Container über Systemd gestartet, überwacht und sogar neu gestartet werden.

Darüber hinaus stellt Podman den Befehl podman generate systemd bereit, der einen entsprechenden systemd-Dienst für den jeweiligen Container generiert und damit dem Nutzer die Erstellung der systemd-Dienste abnimmt, wodurch die Integration auf dem Host-System zur Verfügung steht.

Ein weiterer entscheidender Unterschied zwischen Podman und Docker besteht darin, dass letzterer die Firewall-Regeln oder die aktuelle dnsmasq-Installation nicht ändert, da er ein internes Netzwerk erstellen kann. Im Gegensatz dazu muss Docker die Firewall-Regeln überschreiben, um die Kommunikation zwischen den Containern zu ermöglichen.

PodmanDockerArchitecture DaemonDaemon lessServices Management SystemdDocker EngineFirewall-KompatibilitätÜberschreibt Firewall-RegelnRespektiert Firewall-RegelnPlattformNative Unterstützung für LinuxLinux, Windows und Mac

Wann sollten Sie von Docker zu Podman migrieren?

Wenn Sie Container in einer RHEL-basierten Umgebung bereitstellen, haben Sie in diesem Fall nicht viele Optionen, außer Podman zu verwenden, da es RHEL-nativ ist. Sie können auch zu Podman migrieren oder Docker vorziehen, wenn Sie kleine Bereitstellungen mit wenigen Containern haben.

  So ordnen Sie die Klickfunktion der mittleren Maustaste/des Scrollrads neu zu

Wenn Sie jedoch komplexer werden möchten, verwenden Sie mehrere Container und einen Stapel koordinierender Container mit docker-compose/podman-compose über ein Netzwerk. Es ist besser, Docker zu verwenden, da es die Vernetzung viel besser handhabt.

Wenn Sie gerade erst anfangen, in die Container-Welt einzusteigen, ist Docker in diesem Fall eine bessere Option, da es stabil und gut etabliert mit ordnungsgemäßer Dokumentation ist und im Vergleich zu Podman, dem es noch an Stabilität mangelt, eine flache Lernkurve aufweist hat keine genau definierte Dokumentation.

Migration von Podman zu Docker

Wenn Sie sich auf der Kommandozeile befinden, ist es ganz einfach, von Docker Engine zu Podman zu wechseln. Im einfachsten Fall funktioniert der Befehl docker=podman meistens mit einem $-Alias.

Dies setzt natürlich voraus, dass die entsprechende Software auf dem System installiert ist. Bei Linux ist das auch kein Problem; Für handelsübliche Distributionen stehen fertige Softwarepakete zur Verfügung.

Windows oder macOS gehören nicht zu den unterstützten Betriebssystemen. Der Alias-Ansatz funktioniert, weil viele Docker-Befehle ein Podman-Äquivalent haben.

Aber es gibt auch Ausnahmen, da einige Docker-Befehle keine Entsprechung in der Podman-Welt haben. Ebenso verhalten sich einige Befehle in Docker anders als im Podman-Universum. Im Moment betrifft dies nur die Handhabung bereits eingerichteter Volumes.

Etwas schwieriger gestaltet sich der Wechsel, wenn grafische Tools wie Docker Desktop im Einsatz sind. Betroffen dürfte es vor allem jene Entwickler sein, die mit Windows oder macOS arbeiten.

Nutzer von Docker Desktop müssen sich an die Kommandozeile gewöhnen, gleiches gilt für Docker Compose. Es gibt jedoch das Projekt podman-compose. Die in Python geschriebene Software dient als Ersatz für Docker Compose.

Letzte Worte

Die Ablösung von Docker durch Podman kann als fast abgeschlossen betrachtet werden. Für Benutzer und Administratoren sind die meisten Aspekte dieser Änderung einfach. Viele Docker-Funktionen haben identische Äquivalente in Podman.

Ein echter Vorteil ist das Fehlen eines einzelnen Daemon-Prozesses und Root-Privilegien, ganz zu schweigen von der natürlichen Verwendung von Containergruppen. Es ist jedoch erwähnenswert, dass Docker die Haupttechnologie in Bezug auf Container bleibt, dies sich jedoch höchstwahrscheinlich langfristig ändern wird.

Sie können auch einige Docker-Befehle zum Verwalten von Containern erkunden.