Podman ist ein aufstrebender Trend in einer Containerszene, in der es plötzlich viel mehr Anbieter gibt. Erfahren Sie, was Podman ist und wie es sich im Vergleich zu Docker für Kubernetes-Kompatibilität und mehr eignet. [...]
Podman ist eine Container-Engine – ein Werkzeug zur Entwicklung, Verwaltung und Ausführung von Containern und Container-Images. Container sind standardisierte, in sich geschlossene Softwarepakete, die alle Elemente enthalten, die erforderlich sind, um an einem beliebigen Ort ausgeführt zu werden, ohne dass eine Anpassung erforderlich ist, einschließlich Anwendungscode und unterstützende Bibliotheken. Container-basierte Anwendungen haben die Softwareentwicklung in den letzten zehn Jahren revolutioniert, da sie die Bereitstellung und Wartung verteilter und Cloud-basierter Systeme vereinfachen.
Podman ist ein Projekt von Red Hat, das Open Source ist und kostenlos heruntergeladen werden kann. Es ist ein relativer Neuling in der Containerisierungsszene, dessen Version 1.0 im Jahr 2019 veröffentlicht wurde. Podman hat seitdem große Fortschritte gemacht, und sein Aufstieg wurde durch den allmählichen Niedergang von Docker verstärkt, dem Projekt, das in vielerlei Hinsicht die Welt der Container, wie wir sie heute kennen, geschaffen hat.
Podman und Kubernetes
Wenn Sie auch nur ansatzweise mit containerbasierter Entwicklung vertraut sind, werden Sie den Namen Kubernetes kennen. Da containerisierte Anwendungen immer komplexer werden, benötigen Entwickler Tools, die Container koordinieren können, die miteinander interagieren, während sie auf verschiedenen virtuellen Maschinen oder sogar auf verschiedenen physischen Maschinen laufen.
Ein solches Tool wird als Container-Orchestrierungsplattform bezeichnet, und Kubernetes ist bei weitem das bekannteste Beispiel dafür. Kubernetes kann mit jedem Container arbeiten, der der Open Container Initiative (OCI) Image-Spezifikation entspricht, was bei den Podman-Containern der Fall ist.
Eines der wichtigsten Merkmale von Kubernetes ist das Konzept eines Pods, einer ephemeren Gruppierung von einem oder mehreren Containern, die die kleinste Recheneinheit darstellt, die Kubernetes verwalten kann. Auch Podman basiert, wie der Name schon sagt, auf der Idee eines Pods. Ein Podman-Pod umfasst ebenfalls einen oder mehrere Container, die in einem einzigen Namensraum, Netzwerk und Sicherheitskontext gruppiert sind.
Diese Ähnlichkeit macht Podman und Kubernetes zu einer natürlichen Ergänzung, und von Anfang an war es eines der Ziele von Red Hat, dass Podman-Benutzer Container mit Kubernetes orchestrieren können.
Podman gegen Docker
Der andere prominente Vertreter aus der Welt der Container, von dem Sie mit Sicherheit schon gehört haben, ist Docker. Docker war nicht die erste Container-Engine, aber in vielerlei Hinsicht hat sie die Containerisierung definiert. Vieles von dem, wie Docker funktioniert, ist der De-facto-Standard für Container-basierte Entwicklung – und zwar so sehr, dass viele Leute „Docker“ als Kurzform für Container verwenden.
Obwohl Docker und Podman einen ähnlichen Platz im Container-Ökosystem einnehmen, sind sie nicht dasselbe, und sie haben unterschiedliche Philosophien und Ansätze, wie sie funktionieren. So ist Docker eine All-in-One-Plattform mit Werkzeugen für bestimmte Aufgaben, während Podman für bestimmte Zwecke mit anderen Projekten zusammenarbeitet, z. B. mit Buildah zur Erstellung von Container-Images.
Es gibt auch architektonische Unterschiede: Docker hat zum Beispiel kein eigenes Konzept für Pods. Ein weiterer wichtiger Unterschied besteht darin, dass Docker sich auf ein ständig im Hintergrund laufendes Daemon-Programm verlässt, um Images zu erstellen und Container auszuführen, während Podman Container und Pods als separate untergeordnete Prozesse startet. Dieser Aspekt des Designs von Docker hat wichtige Auswirkungen auf die Sicherheit, auf die wir gleich noch eingehen werden.
Docker-Befehle auf Podman
Aufgrund ihrer Konzeption und Notwendigkeit sind Podman und Docker insgesamt kompatibel. Ein Teil dieser Kompatibilität kann auf die Einhaltung offener Standards zurückgeführt werden. Da beide Engines mit Containern arbeiten, die dem OCI-Standard entsprechen, können Sie einen Container mit Docker erstellen und ihn in Podman ändern oder umgekehrt, und dann einen der beiden Container in Kubernetes bereitstellen.
Als Podman 2019 auf den Markt kam, war Docker so dominant, dass seine Kommandozeilen-Schnittstelle für viele Entwickler zu einem Teil ihrer Programmierroutinen und ihres Arbeitsspeichers geworden war. Um eine mögliche Umstellung auf Podman nahtloser zu gestalten, haben die Podman-Macher dafür gesorgt, dass die Befehle und die Syntax von Podman so weit wie möglich an die von Docker angelehnt sind. Sie sind sogar so weit gegangen, dass es möglich ist, ein Alias festzulegen, das Docker-Befehle zu Podman umleitet.
Mehr Sicherheit mit Root-losen Containern
Da Podman und Docker in vielerlei Hinsicht so ähnlich funktionieren, warum sollte man sich für das eine entscheiden und nicht für das andere?
Ein wichtiger Grund ist die Sicherheit. Erinnern Sie sich daran, dass Docker auf einen Daemon angewiesen ist, um einen Großteil seiner Aufgaben zu erledigen? Dieser Daemon läuft als Root, was ihn zu einem potenziellen Einfallstor für Angreifer macht. Dies ist kein unüberwindbares Hindernis für eine sichere Datenverarbeitung, aber es bedeutet, dass Sie sich über die Sicherheit von Docker gründlich Gedanken machen müssen.
In manchen Situationen werden Sie einen Container mit Root-Rechten auf seinem Host-Rechner ausführen wollen, und Podman ermöglicht Ihnen das. Wenn Sie Ihre Container jedoch lieber sicher auf den Userspace beschränken möchten, können Sie auch das tun, indem Sie einen so genannten Rootless-Container ausführen. Ein Rootless-Container hat nicht mehr Rechte als der Benutzer, der ihn gestartet hat; innerhalb des Containers hat dieser Benutzer Root-Rechte. Sie können auch Kommandozeilen-Flags verwenden, um Ihren Containern spezifische Privilegien zu geben.
Wie sieht es mit der Performance aus?
Ein Bereich, in dem Docker gegenüber Podman die Nase vorn hat, ist die Leistung, zumindest in den Augen so mancher.
Es gibt zwar wenig konkrete Informationen zu diesem Thema, aber es ist nicht schwer, frustrierte Entwickler auf Hacker News, Stack Overflow und Reddit zu finden, die sich über die Leistung von Podman beschweren, insbesondere wenn es ohne Root läuft.
Einige schwedische Universitätsstudenten führten eine Benchmark-Suite auf verschiedenen Container-Plattformen durch und stellten fest, dass die Leistung von Podman mangelhaft war, obwohl es sich dabei zugegebenermaßen um eine ältere Version vor 1.0 handelte. Es gibt zwar nicht viele technische Informationen zu diesem Thema, aber rein anekdotisch wird Podman für seine Leistung getadelt.
Wird Podman Docker ersetzen?
Aufgrund der bisherigen Erörterung mag es nicht so klingen, als sei ein großer Stimmungsumschwung im Gange, um Docker durch Podman zu ersetzen. Aber es steht eine große Veränderung bevor, die Docker aus einer seiner langjährigen Nischen verdrängen wird: Kubernetes selbst.
Kubernetes und Docker sind seit Jahren die beiden Giganten der Container-Welt. Aber ihre Koexistenz war immer etwas unruhig. Der Aufstieg von Kubernetes kam, nachdem sich Docker in seiner Nische etabliert hatte. Man könnte sogar sagen, dass Kubernetes zum Teil deshalb populär wurde, weil Docker der Aufgabe nicht gewachsen war, all die Container zu verwalten, die in einer großen, verteilten Anwendung koordiniert werden mussten.
Swarm gegen Kubernetes?
Docker (das Unternehmen) entwickelte 2015 seine eigene Container-Orchestrierungsplattform mit dem Namen Swarm, die die Stärken von Docker ausspielen sollte. Swarm wurde mit großem Tamtam eingeführt, konnte aber nie ganz mit Kubernetes mithalten. Während Swarm immer noch Anhänger hat, ist Kubernetes zum De-facto-Standard für die Container-Orchestrierung geworden, so wie Docker zum De-facto-Standard für andere Aspekte des Container-Ökosystems wurde.
Darüber hinaus hat sich Docker in Bezug auf seine Container-Runtime, die Low-Level-Komponente der Container-Engine, die unter anderem mit dem zugrunde liegenden Betriebssystem-Kernel arbeitet und einzelne Container-Images einbindet, nie ganz mit Kubernetes vertragen. Sowohl Docker als auch Kubernetes sind konform mit der OCI-Image-Spezifikation, die Kubernetes zur Koordinierung der für Container erstellten Images verwendet. Kubernetes ist jedoch auch auf Container-Laufzeiten angewiesen, die mit einer standardisierten Plugin-API namens Container Runtime Interface (CRI) kompatibel sind, die Docker nie implementiert hat.
Die Popularität von Docker zwang Kubernetes lange Zeit zur Verwendung von Dockershim, einer CRI-kompatiblen Schicht, die als Vermittler zwischen Kubernetes und dem Docker-Dämon fungierte. Dies war jedoch immer eine Art Hack, und Anfang dieses Jahres hat Kubernetes die Unterstützung für Dockershim aufgegeben. (Podman hingegen verwendet die kompatible CRI-O-Laufzeitumgebung der Cloud Native Computing Foundation).
Dies ist Teil einer umfassenderen Geschichte über den Versuch und das Scheitern von Docker, ein Enterprise-Unternehmen zu werden. Kurz gesagt, Docker war nie in der Lage, sich vollständig von Kubernetes zu lösen. Kubernetes hingegen braucht Docker nicht mehr in dem Maße, wie es einst der Fall war.
Ob Podman Docker ersetzen wird, ist unklar, aber es wird definitiv einer der Anwärter sein. Es ist hilfreich, dass Podman kein Flaggschiffprodukt ist, das monetarisiert werden soll, sondern eher ein einzelnes Open Source-Technologieangebot eines viel größeren Unternehmens. Wir können davon ausgehen, dass Podman und Kubernetes noch einige Zeit miteinander verflochten bleiben werden.
Welche Container-Engine sollten Sie verwenden?
Wir hoffen, dass Ihnen diese Erörterung einen Eindruck von den Faktoren vermittelt, die Ihnen bei der Wahl zwischen diesen beiden Container-Engines helfen. Podman basiert auf einer sichereren Architektur, während Docker eine tiefere Geschichte hat. Podman ist nativ für Kubernetes, während Docker auch mit Docker Swarm funktioniert. Docker enthält alle Funktionen, die Sie für viele containerbezogene Aufgaben benötigen. Podman ist modular aufgebaut und lässt Sie mit verschiedenen Tools für unterschiedliche Zwecke experimentieren.
Abgesehen davon ist die Frage Podman vs. Docker“ in gewisser Hinsicht falsch gestellt. Beide Plattformen erstellen Images, die der OCI-Spezifikation entsprechen, und beide werden durch viele der gleichen Kommandos gesteuert, so dass Sie nahtlos zwischen beiden wechseln können. Sie können beispielsweise Docker für die lokale Entwicklung verwenden und dann Podman einsetzen, um die von Ihnen erstellten Container in Kubernetes bereitzustellen.
Ein Merkmal, das Docker von anderen unterscheidet, ist der kostenpflichtige Support. Aber auch das hat eine Kehrseite: Da Docker (das Unternehmen) versucht, sein Flaggschiffangebot zu monetarisieren, hat es begonnen, für die Entwicklungsumgebung Docker Desktop Gebühren zu erheben. Red Hat hingegen scheint sich damit zufrieden zu geben, Podman vorerst kostenlos anzubieten.
*Jacqueline Primavera ist technische Autorin und Redakteurin aus Los Angeles.
Be the first to comment