Wenn Sie sich für Virtualisierung und Containerisierung interessieren, sind Sie wahrscheinlich schon mit Podman und Docker in Berührung gekommen und fragen sich vielleicht, wie sich die beiden voneinander unterscheiden.
In diesem Beitrag gehen wir auf die Unterschiede zwischen Docker und Podman ein und versuchen herauszufinden, welches Programm für Sie die richtige Wahl ist!
Docker
Docker ist eine Containerisierungstechnologie, die das Abhängigkeitsmanagement innerhalb eines Projekts auf allen Ebenen (Entwicklung und Bereitstellung) erleichtert.
Der Mechanismus von Docker, der unter Linux, Windows und Mac OS verfügbar ist, dreht sich um Container und deren Orchestrierung. Und genau hier unterscheidet sich die Containerisierung von der Virtualisierung.
Docker besteht aus zwei Hauptbausteinen: Docker CLI und Docker Daemon.
Docker Daemon:
Es handelt sich um einen konstanten Hintergrundprozess, der bei der Verwaltung von Docker-Images, Containern, Netzwerken und Speichervolumen hilft. Docker verwendet seine Docker Engine REST API, um mit dem Docker Daemon zu interagieren. Der Zugriff erfolgt über das HTTP-Protokoll.
Docker CLI:
Dies ist der Docker-Befehlszeilen-Client für die Interaktion mit dem Docker-Daemon. Er wird verwendet, wenn Sie einen beliebigen Docker-Befehl ausführen.
Der Betrieb von Docker basiert auf dem Linux-Kernel und den Funktionen dieses Kernels, wie cgroups und Namespaces. Diese Funktionen trennen die Prozesse, so dass sie unabhängig voneinander ausgeführt werden können, da der Zweck von Containern darin besteht, mehrere Prozesse und Anwendungen separat auszuführen.
Auf diese Weise lässt sich die Nutzung der Infrastruktur optimieren, ohne dass das Sicherheitsniveau im Vergleich zu separaten Systemen sinkt.
Alle Container-Tools wie Docker verfügen über ein Image-basiertes Bereitstellungsmodell. Dieses Modell vereinfacht die gemeinsame Nutzung einer Anwendung oder einer Reihe von Diensten über mehrere Umgebungen hinweg.
Außerdem hilft Docker bei der Automatisierung der Bereitstellung von Anwendungen in einer Container-Umgebung. Mit diesen verschiedenen Tools erhalten die Benutzer vollen Zugriff auf Anwendungen und können die Bereitstellung beschleunigen, Versionen kontrollieren und 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 sein Enterprise Linux 8 vorgesehen. Es wird für die Container-Verwaltung verwendet und ist der offizielle Nachfolger von Docker.
Red Hat hat daraufhin die Unterstützung für Docker eingestellt, versicherte aber, dass der Wechsel für die Benutzer einfach sein würde, da Podman auf Docker basiert, obwohl es ursprünglich nur als Debugging-Tool gedacht war.
Es verwaltet das gesamte Container-Ökosystem mithilfe der libpod-Bibliothek. Da Podman nur auf Linux-Plattformen funktioniert, werden derzeit eine REST-API und Clients entwickelt, damit Mac- und Windows-Systeme den Dienst aufrufen können.
Unter gibt es jedoch derzeit einen Varlink-basierten Remote-Client, der auf Mac- oder Windows-Plattformen funktioniert und die 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.
Sie unterstützt auch Pods, um Gruppen von Containern gemeinsam zu verwalten, und mehrere Image-Formate, darunter OCI und Docker-Image-Formate.
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 Container-Nutzer können mit den Pods bereits die nächste Stufe genießen. Der Aufbau und Betrieb eines Kubernetes-Clusters ist nicht mehr notwendig. Im einfachsten Fall können neu entwickelte Pods im Einzelbetrieb getestet und verbessert werden. Auch eine spätere Übertragung auf Kubernetes ist möglich.
Der Befehl podman generate kube
liefert die entsprechenden Konfigurationsdateien. Diese dienen dann eins-zu-eins als Eingabe für das Kubernetes-Tool kubectl.
Aktuelle Versionen von Podman können sogar Konfigurationsdateien für systemd erstellen – ein Leckerbissen für jeden, der den allgegenwärtigen init-Nachfolger für die Container-Orchestrierung verwendet.
Podman vs. Docker: Unterschiede
Docker hat sich schnell als das Steckenpferd für die Verwaltung von Containern etabliert. Docker hat jedoch viele Vorteile und vor allem das schnell wachsende Repertoire an Images, aber auch Nachteile und mögliche Sicherheitsrisiken. Außerdem wird Docker nicht mehr als Container für Kubernetes unterstützt.
Die Tatsache, dass Container im Gegensatz zu virtuellen Systemen keinen eigenen Kernel benötigen, wird gewöhnlich als einer der großen Vorteile angesehen. Allerdings stellt dies bei Docker ein großes Sicherheitsrisiko dar, da Docker-Container nur mit Root-Rechten ausgeführt werden können.
Dadurch können Prozesse, die in den Containern laufen, mit Root-Rechten auf den Kernel zugreifen und so das Hostsystem angreifen.
Der erste Unterschied ist bei der ersten Verwendung offensichtlich. Während bei Docker zunächst der Docker-Daemon gestartet werden muss, kann ein Podman-Container direkt von der Befehlszeile aus gestartet werden. Es gibt also keinen Hintergrundprozess, und die Anwendung wird nur bei Bedarf ausgeführt.
Aus Sicht der Sicherheit 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 seiner Architektur, die sich grundlegend von Docker unterscheidet, keinen Hintergrundprozess.
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.
Bei der ersten Verwendung wird ein Benutzernamensraum erstellt, wenn Podman mit normalen Benutzerrechten ausgeführt wird. Im Benutzernamensraum läuft Podman mit Root-Rechten und hat die Rechte, Dateisysteme einzuhängen 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 aber für andere Benutzer und den Superuser nicht sichtbar sind.
Da Podman unabhängig von Docker betrieben wird, haben die Entwickler einen großen Spielraum und können auf die Wünsche der Community eingehen. Zu den interessanten Ergänzungen von Podman gehören der Befehl mount/unmount und die systemd-Integration.
Mit dem Befehl mount/unmount kann der Host das Dateisystem des Containers einhängen, um beispielsweise auf Dateien zuzugreifen oder sie zu ändern, und anschließend wieder aushängen.
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.
Außerdem stellt Podman den Befehl podman generate systemd
zur Verfügung, der einen entsprechenden systemd-Dienst für den jeweiligen Container generiert und damit den Benutzer von der Erstellung der systemd-Dienste entlastet, so dass die Integration auf dem Hostsystem gegeben ist.
Ein weiterer entscheidender Unterschied zwischen Podman und Docker besteht darin, dass letzteres aufgrund seiner Fähigkeit, ein internes Netzwerk zu erstellen, keine Änderungen an den Firewall-Regeln oder der aktuellen dnsmasq-Installation vornehmen muss. Im Gegensatz dazu muss Docker die Firewall-Regeln überschreiben, um die Kommunikation zwischen den Containern zu ermöglichen.
Podman | Docker | |
Architektur | Dämon | Daemon weniger |
Verwaltung von Diensten | Systemd | Docker-Engine |
Firewall-Kompatibilität | Überschreibt Firewall-Regeln | Respektiert Firewall-Regeln |
Plattform | Native Unterstützung für Linux | Linux, Windows und Mac |
Wann sollten Sie von Docker auf Podman umsteigen?
Wenn Sie Container in einer RHEL-basierten Umgebung bereitstellen, haben Sie in diesem Fall nicht viele Möglichkeiten, außer Podman zu verwenden, da es nativ für RHEL ist. Sie können auch zu Podman migrieren oder es Docker vorziehen, wenn Sie kleine Implementierungen mit wenigen Containern haben.
Wenn Sie jedoch komplexer werden wollen, sollten Sie mehrere Container und einen Stapel koordinierender Container mit docker-compose/podman-compose über ein Netzwerk einsetzen. Es ist besser, Docker zu verwenden, da es die Vernetzung viel besser handhabt.
Auch wenn Sie gerade erst in die Containerwelt einsteigen, ist Docker die bessere Wahl, da es stabil ist, über eine gute Dokumentation verfügt und eine geringe Lernkurve aufweist, verglichen mit Podman, dem es noch an Stabilität mangelt und das keine gut definierte Dokumentation hat.
Umstellung von Podman auf Docker
Wenn Sie auf der Kommandozeile arbeiten, ist es recht einfach, von Docker Engine zu Podman zu wechseln. Im einfachsten Fall funktioniert der Befehl $ alias docker=podman
in den meisten Fällen.
Dies setzt natürlich voraus, dass die entsprechende Software auf dem System installiert ist. Im Falle von Linux ist auch das kein Problem; für die handelsüblichen Distributionen gibt es fertige Softwarepakete.
Windows oder macOS gehören nicht zu den unterstützten Betriebssystemen. Der Alias-Ansatz funktioniert, weil viele Docker-Befehle eine Podman-Entsprechung haben.
Aber es gibt auch Ausnahmen, denn einige Docker-Befehle haben kein Gegenstück in der Podman-Welt. Ebenso verhalten sich einige Befehle in Docker anders als in der Podman-Welt. Im Moment betrifft dies nur die Handhabung von Volumes, die bereits eingerichtet wurden.
Die Umstellung ist etwas schwieriger, wenn grafische Tools wie Docker Desktop im Einsatz sind. Dies dürfte vor allem jene Entwickler betreffen, die mit Windows oder macOS arbeiten.
Benutzer von Docker Desktop werden sich an die Kommandozeile gewöhnen müssen, und dasselbe 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 Funktionen von Docker haben identische Entsprechungen in Podman.
Ein echter Vorteil ist das Fehlen eines einzelnen Daemon-Prozesses und von Root-Rechten, ganz zu schweigen von der natürlichen Verwendung von Containergruppen. Es ist jedoch erwähnenswert, dass Docker nach wie vor die wichtigste Technologie in Bezug auf Container ist, aber das wird sich wahrscheinlich auf lange Sicht ändern.