Als Docker die Abkehr von seiner bisherigen Lizenzpolitik ankündigte - seit 2022 ist Docker Desktop für größere Unternehmen kostenpflichtig -, ging ein Raunen durch die IT-Gemeinde. Auch Schwächen im Sicherheitsbereich sorgen seit geraumer Zeit bei den Nutzern für Unmut. Schon länger gilt deshalb Podman als attraktive Alternative, nicht zuletzt, weil diese Umgebung auf einen zentralen Daemon verzichtet. Wir zeigen, wie Sie die Wachablösung auf den Weg bringen und dabei auf Podman Desktop zurückgreifen.
Die Kommerzialisierung von Open-Source-Projekten und das Hickhack um Lizenzfragen nagen an der Akzeptanz von freier Software. Nicht selten ist ein solcher Schritt der Todesstoß für die Bereitschaft der Community, sich aktiv in die Weiterentwicklung einzubringen. Die undurchsichtige Lizenzpolitik vonseiten der Docker-Entwickler hat in der Vergangenheit zu manchen Kontroversen geführt. Kein Wunder also, dass Red Hat, SUSE und andere Linux-Distributionen schon vor Jahren Docker durch Podman [1] ersetzten.
Lizenz-Hickhack bei Docker
Verantwortlich für weitreichende Änderungen der Lizenzpolitik war die Übernahme von Docker Inc. durch Mirantis im November 2019. Inzwischen setzt der Anbieter auf ein Abomodell: Für Unternehmen mit mehr als 250 Mitarbeitern oder einem Jahresumsatz von mehr als 10 Millionen US-Dollar fallen abhängig von der Wahl der Subskriptionsvariante 5, 9 oder 24 US-Dollar pro Benutzer und Monat an - das alles bei jährlicher Zahlung. Je nach Nutzung im Unternehmen bedeutet dies beträchtliche Zusatzkosten für die IT.
Ein weiteres Ärgernis: Die Auditklausel. Laut den Lizenzvereinbarungen räumen Nutzer Docker das Recht ein, für die Lizenzierung relevante Daten mindestens drei Jahre lang speichern zu dürfen. Das bedeutet, dass Organisationen sicherstellen müssen, dass diese Daten zuverlässig archiviert werden. Um sich vor möglichen Vertragsstrafen zu schützen, bedarf es des Einsatzes einer speziellen Software-Asset-Management-Umgebung. Gleichwohl erlaubt die Personal-Variante auch weiterhin die kostenlose Nutzung.
Die Kommerzialisierung von Open-Source-Projekten und das Hickhack um Lizenzfragen nagen an der Akzeptanz von freier Software. Nicht selten ist ein solcher Schritt der Todesstoß für die Bereitschaft der Community, sich aktiv in die Weiterentwicklung einzubringen. Die undurchsichtige Lizenzpolitik vonseiten der Docker-Entwickler hat in der Vergangenheit zu manchen Kontroversen geführt. Kein Wunder also, dass Red Hat, SUSE und andere Linux-Distributionen schon vor Jahren Docker durch Podman [1] ersetzten.
Lizenz-Hickhack bei Docker
Verantwortlich für weitreichende Änderungen der Lizenzpolitik war die Übernahme von Docker Inc. durch Mirantis im November 2019. Inzwischen setzt der Anbieter auf ein Abomodell: Für Unternehmen mit mehr als 250 Mitarbeitern oder einem Jahresumsatz von mehr als 10 Millionen US-Dollar fallen abhängig von der Wahl der Subskriptionsvariante 5, 9 oder 24 US-Dollar pro Benutzer und Monat an - das alles bei jährlicher Zahlung. Je nach Nutzung im Unternehmen bedeutet dies beträchtliche Zusatzkosten für die IT.
Ein weiteres Ärgernis: Die Auditklausel. Laut den Lizenzvereinbarungen räumen Nutzer Docker das Recht ein, für die Lizenzierung relevante Daten mindestens drei Jahre lang speichern zu dürfen. Das bedeutet, dass Organisationen sicherstellen müssen, dass diese Daten zuverlässig archiviert werden. Um sich vor möglichen Vertragsstrafen zu schützen, bedarf es des Einsatzes einer speziellen Software-Asset-Management-Umgebung. Gleichwohl erlaubt die Personal-Variante auch weiterhin die kostenlose Nutzung.
Dass der neue Eigentümer von Docker Geld mit seinem Investment verdienen will und muss, um die weitere Entwicklung voranzutreiben, ist nachvollziehbar. Hier zeigt sich ein wesentlicher strategischer Unterschied. Hinter Podman steckt eine bekannte Branchengröße: Red Hat. Doch deren Geschäftsmodel fokussiert das Erzielen von Einnahmen mit Lizenzen und Support aus dem RHEL- und OpenShift-Geschäft.
Um die eigene IT-Infrastruktur zukunftssicher zu machen, müssen Administratoren langfristig planen können. Dabei erweist sich ein Gerangel um Lizenzen als kontraproduktiv. Hier kommt Podman ins Spiel. Schon länger wird das Open-Source-Projekt in der Community als Wachablösung von Docker diskutiert. Dabei sprechen einige Aspekte - neben strategischen auch technologische - für einen Umstieg auf Podman.
Podman versus Docker
Grundsätzlich dienen Podman und Docker der skalierbaren Ausführung, Verwaltung und Bereitstellung von Containern. Gleichzeitig gibt es einige grundlegende Unterschiede zwischen beiden Umgebungen. Der vielleicht wichtigste betrifft architektonische Aspekte: Während Docker auf einem Client-Server-Modell basiert, verwendet Podman eine Architektur ohne Daemon. Die Ausführung eines kontinuierlichen Daemon-Prozesses im Hintergrund wird damit überflüssig.
Der Gewinn: Die unmittelbare Verwaltung führt dazu, dass Podman-Container deutlich schneller starten. Einige Quellen sprechen von einem Performancegewinn von bis zu 50 Prozent. Dieses Konzept erhöht nicht zuletzt die Sicherheit der Umgebung.
Podman ab Werk sicherer
Startet Docker einen Container, sendet der Docker-Client eine Anfrage an den Docker-Daemon, der dann seinerseits für den Start des Containers verantwortlich ist. Mithin sind die Container Kind-Prozesse des Docker-Daemons. Tritt nun ein relevantes Ereignis auf, das von einem Containerprozess ausgeht und vom Linux-Audit-System (auditd) registriert wird, wird die Audit-Benutzer-ID als ungültig bewertet - statt die tatsächliche Benutzer-ID als kritisch zu bewerten, die den betreffenden Container gestartet hat.
Die Folge: Die Zuordnung von kritischen Aktivitäten zu einem bestimmten Benutzer ist kaum möglich. Das führt zu einer signifikanten Beeinträchtigung der Systemsicherheit. Anders verhält es sich bei Podman: Hier wird jeder Container direkt über eine Benutzeranmeldesitzung instanziiert. Dabei bleiben die Informationen in den Containerprozessdaten erhalten und auditd kann die Benutzer-ID spezifischen Containerprozessen zuordnen. Damit bleibt der Prüfpfad erhalten.
Container-Umgebungen zielen darauf ab, deren Ausführung möglichst weitreichend vom Host-System zu isolieren. Das größte Risiko stellen Container-Ausbrüche dar, bei denen es einem Angreifer gelingt, das Host-System zu kompromittieren. Um derlei Risiken zu minimieren, erfolgt die Ausführung der Container mit minimalen Rechten. Viele Administratoren und Entwickler schätzen Podman dafür, dass die Container-Umgebung diesen Risiken strikt begegnet. Grundsätzlich beherrscht auch Docker Container ohne Root-Rechte; Benutzernamensräume und seccomp-Profile sind dort aber standardmäßig aktiviert und erfordern weitreichende Systemanpassungen.
Podman setzt standardmäßig auf Container ohne Root-Berechtigungen, die in isolierten Benutzernamensräumen laufen. Das Risiko eines Ausbruchs ist damit signifikant reduziert. Anders bei Docker: In den Standardeinstellungen laufen Containerprozesse als Root. Außerdem sind Podman-Container an Benutzersitzungen gebunden. Damit können Audit-Systeme bösartige Aktivitäten zu bestimmten Benutzern zurückverfolgen. Das gestaltet sich bei Docker aufgrund des systemweiten Daemons deutlich schwieriger.
Allerdings gibt es auch Gemeinsamkeiten: Podman und Docker greifen auf die Fähigkeiten des Linux-Kernels und die seccomp-Profile zur Kontrolle der Prozessberechtigungen zurück. Gemein ist beiden Umgebungen zudem, dass eine robuste Sicherheit konfigurierbar ist. Allerdings erfordert Podman deutlich weniger Aufwand, um ein vergleichbares Sicherheitsniveau zu erreichen.
systemd und Compose-Instrument
Docker und Podman unterscheiden sich auch in Bezug auf das Management des Lebenszyklus von Containern. Da ein Daemon fehlt, stützt sich Podman weitgehend auf systemd. Außerdem kann Podman systemd-Dienstdateien aus den laufenden Containern generieren. Das erlaubt es Ihnen, Container unter systemd-Verwaltung stellen, um die verschiedenen Dienste zu starten, zu stoppen und zu überprüfen. Docker erledigt all diese Aufgaben intern über den Daemon.
Unterschiede ergeben sich außerdem bei der Orchestrierung. Docker-User greifen zur lokalen Entwicklung in der Regel zur Docker Compose, weil sich damit Multi-Container-Applikationen einfach definieren und verwalten lassen. Podman verfügt aber mit Podman Compose über ein vergleichbares Instrument. Außerdem bietet Podman die sogenannten Pods. Dabei handelt es sich um ein an Kubernetes angelehntes Konzept, das die Verwaltung einer Container-Gruppe als eine Einheit erlaubt. Soweit es das Deployment betrifft, verfügt Podman nicht über eine Alternative zu Docker Swarm. Podman ist vielmehr auf ein externes Orchestrierungssystem wie beispielsweise Kubernetes angewiesen.
Leicht zu bedienen mit GUI und Dashboard
Um die Arbeit mit Containern zu vereinfachen, gab das Red-Hat-Entwicklerteam im Mai 2023 die Fertigstellung von Podman Desktop [2] bekannt. In Anlehnung an Docker Desktop vereinfacht auch diese Desktopumgebung das Hantieren mit Containern unterschiedlichen Typs. Podman Desktop verfügt über eine grafische Oberfläche, um nahtlos mit Containern und Kubernetes in einer lokalen Umgebung zu arbeiten. Damit schlägt Podman Desktop die Brücke zu Kubernetes-Umgebungen.
Die Desktop-Umgebung stellt hierfür ein übersichtliches Dashboard zur Interaktion und Verwaltung von Containern, Images und Pods zur Verfügung. Sie können Kubernetes-Objekte auch lokal mit Podman oder in lokalen Kubernetes-Clustern ausführen. Daraus resultiert ein nahtloser Übergang von der Entwicklung zur Bereitstellung.
Wissen sollten Nutzer auch, dass Podman und Docker sich nicht zwingend gegenseitig ausschließen - im Gegenteil. Podman Desktop funktioniert beispielsweise mit verschiedenen Container-Engines, einschließlich Docker. Die Entwickler bezeichnen Podman Desktop als "Multi-Engine UI-Tool" [3]. Genauer: Das Tool ist mit der API von Docker und Podman kompatibel. Das bedeutet, dass Sie alle Container und Images der verschiedenen Engines parallel nutzen können. Dieser Umstand erleichtert nicht zuletzt eine mögliche Migration von Docker zu Podman.
Erste Schritte mit Podman Desktop
Podman Desktop steht im Download-Bereich der Projektseite für macOS, Linux und Windows bereit. Für Mac-Systeme gibt es DMG- und für Linx-Rechner Flatpak-Pakete. Für Windows-Anwender stehen ein Installer und eine portable Umgebung zur Verfügung. Ebenso möglich ist die Winget-basierte Installation. Entscheiden Sie sich für die Installer-Variante, stellt der Setupassistent neben Podman die Compose-Erweiterung und das kubectl-CLI zur Auswahl.
Nach der Installation von Podman Desktop können Sie erste Gehversuche beim Erstellen einer Podman-Machine unternehmen. Unter macOS und Windows ist für die Ausführung der Podman-Container-Engine die Existenz einer virtuellen Linux-Maschine erforderlich. Sofern Podman nicht bereits installiert ist, können Sie dies über das Menü "Resources" nachholen. Folgen Sie dem Link "Setup". Podman Desktop prüft, ob Podman installiert ist. Falls nicht, können Sie dies mit einem Klick auf "Next" nachholen.
Nach der Podman-Installation können Sie unmittelbar mit dem Anlegen einer ersten Podman-Maschine beginnen. Weisen Sie dieser im Formular "Create a Podman machine" eine Bezeichnung zu. Standardmäßig ist die Vergabe von Root-Rechten mit dem Schalter "Machine with root privileges" aktiviert; das sollten Sie ändern. Mit einem Klick auf "Create" legen Sie den Container an. Mit der Option "User mode networking" lässt sich der Datenverkehr des Gastes über einen User-Space-Prozess an den Host weiterleiten. Das Aktivieren dieser Option mit der Einstellung "true" sorgt dafür, dass VPNs den gesamten Datenverkehr des Podman-Systems als vom Host stammend bewerten. Damit verhindern Sie ein mögliches Abweisen.
Soll die Maschine unmittelbar nach dem Anlegen starten, aktivieren Sie die Option "Enabled". Mit einem abschließenden Klick auf "Create" erzeugen Sie den Container. Die neue Maschine erscheint nun im Dashboard. Wenn Sie zum Terminalfenster wechseln, können Sie mit dem Befehl podman machine list die Liste der Podman-Machines abrufen.
Über die Menüleiste, die sich im linken Bereich des Podman-Desktop-Fensters befindet, greifen Sie auf die Container, die Pods, die Images und die verfügbaren Erweiterungen zu. Bei einer Neuinstallation sind all diese Bereiche noch leer. Um ein erstes Abbild zu beziehen, wechseln Sie zum Menü "Images", geben das gewünschte Image an und klicken auf "Pull". Podman Desktop gibt nach dem Download eine Erfolgsmeldung aus. Anschließend finden Sie das neue Image in dem gleichnamigen Menü. Details zu einem Abbild rufen Sie mit einem Klick auf den Image-Eintrag ab. Neben der Zusammenfassung präsentiert Ihnen Podman Desktop die History und die Details des Images im JSON-Format. Aus der Übersicht starten Sie auch das Image.
Nach einem Klick auf das "Start"-Icon präsentiert Ihnen das Tool verschiedene Registerkarten für die Konfiguration des Containers aus der zugrundeliegenden Image-Datei. Auf der Registerkarte "Basic" bestimmen Sie neben der Container-Bezeichnung beispielsweise den Entrypoint und definieren das Port-Mapping. Mithilfe der Einstellung der Registerkarte "Networking" können Sie beispielweise einen Hostnamen spezifizieren. Mit einem Klick auf "Start Container" führen Sie die Konfiguration aus. Im "Container"-Menü wird ein entsprechender Eintrag generiert. Dort sehen Sie die Protokolle auf der Registerkarte "Logs" ein.
Alle Container-Informationen inklusive der Information zum genutzten Image finden Sie wieder auf der Registerkarte "Inspect". Der Reiter "Kube" führt Sie zur Kubernetes-YAML-Manifest-Datei, die von dem Container verwendet wird. Um Befehle an den Container zu übergeben, greifen Sie auf die Registerkarte "Terminal" zurück.
Container verwalten
Was Podman Desktop nicht verrät, ist, welche Container-Images zur Verfügung stehen. Hierfür nutzen Sie das Terminalfenster und verwenden einen Suchbegriff:
podman search <Suchbegriff>
Wollen Sie einen Nginx-Webserver aufsetzen, nutzen Sie beispielsweise folgenden Befehl:
podman search nginx
Dieses Kommando sucht in allen verfügbaren Repositories nach Übereinstimmungen. In der Ergebnisausgabe wählen Sie das passende Paket und laden es mithilfe der Pull-Funktion der Image-Verwaltung herunter. Die Repositories sind übrigens in der Konfigurationsdatei "/etc/ containers/repositories.conf" hinterlegt.
Aber Podman Desktop vereinfacht die Nutzung: Mit einem Klick auf "Manage registries" erfahren Sie, welche Repositories verfügbar sind. Wenn Sie firmeninterne verwenden wollen, fügen Sie diese mit "Add registry" hinzu. Dazu ist die Angabe der URL der Credentials erforderlich. Mit einem Klick auf "Login" steht die Ablage zur Verfügung.
Wichtig ist, dass Sie die Funktionstüchtigkeit des Registry-Setups verifizieren. Wenn Sie eine Podman-basierte WordPress-Installation in Betrieb nehmen wollen, laden Sie sich das zugeführte Image herunter und generieren einen Container auf Grundlage dieses Images. Entscheidend ist dabei die Angabe des Port-Mappings, damit ein Zugriff auf die webbasierte Umgebung möglich ist. Nach dem Starten der Umgebung greifen Sie mit einem Klick auf "Open Browser" auf das Blogsystem zu.
Mit Images arbeiten
Um die Migration von Docker nach Podman so einfach wie möglich zu machen, haben sich die Entwickler eine Importfunktion implementiert, die einen möglichen Umstieg beziehungsweise die Evaluierung vereinfacht.
Dazu öffnen Sie die "Images"-Verwaltung, betätigen den "Import"-Button, fügen das gewünschte Abbild hinzu und initiieren den Vorgang mit einem Klick auf "Import Containers". Wie die Bezeichnung der Schaltfläche vermuten lässt, können Sie mehrere Images auf einen Schlag einführen.
Wollen Sie einen bestehenden Container importieren, müssen Sie diesen zunächst speichern. Im Falle eines Docker-Containers führen Sie folgenden Befehl aus:
Sie können die Importfunktion auch verwenden, um einen Podman-Container auf ein Drittsystem zu übertragen. Dazu sichern Sie diesen mit folgendem Befehl:
podman save <Ihr_Container> <Ihr_Container_Export>.tar
Noch einfacher geht es mit Podman Desktop: Hier führen Sie in der Container-Verwaltung in der Spalte "Actions" den "Export"-Befehl aus. Beim Import ist außerdem darauf zu achten, dass Sie nur Kleinbuchstaben für die Image-Bezeichnung verwenden. Andernfalls gibt Podman Desktop eine Fehlermeldung aus. Nach dem Import finden Sie das importierte Archiv in der Podman-Image-Verwaltung.
Nutzung von Docker Compose
Docker bietet mit Docker Compose die Möglichkeit, Multi-Tier-Applikationen zu generieren, wie sie sich millionenfach in typischen Infrastrukturen finden. Das Orchestrierungswerkzeug erlaubt die Definition von verschiedenen Containern, deren Verknüpfung und Ausführung auf einem beliebigen Docker-Host. Die gute Nachricht für Podman-Desktop-Anweder: Auch diese Umgebung unterstützt die Compose-Spezifikation [4].
Bevor Sie Compose in Podman Desktop nutzen können, ist die Installation der Compose Engine erforderlich. Sollten Sie Compose nicht bei der Podman-Desktop-Installation aktiviert haben, holen Sie dies nun nach. Dazu wechseln Sie in das Menü "Setting/Resources". Im Bereich "Compose" klicken Sie auf "Setup" und folgen den Anweisungen. Die Compose-Referenz-implementierung befindet sich in Ihrem "PATH"; daher können Sie die Version der Compose-Engine im Terminal anzeigen:
docker-compose version
Zur Verifizierung der Installation sollten Sie sicherstellen, dass Podman die gleiche Compose-Version identifiziert:
podman compose version
Zur Nutzung von Compose benötigen Sie eine Compose-Datei, beispielsweise "compose.yaml". Um diese auszuführen, greifen Sie zum Terminalfenster:
podman compose --file compose.yaml up --detach
Darauf startet die Compose-Engine die spezifizierten Container und Dienste. Die verschiedenen Ressourcen werden um folgende Label erweitert:
Podman Desktop erkennt die Compose-Label und visualisiert die Container-Gruppe durch ein entsprechendes Icon. Außerdem erhält die Gruppenbezeichnung den Zusatz "(compose)".
Fortgeschrittene Techniken
Podman und Podman Desktop besitzen eine Vielzahl von weiteren interessanten Funktionen. So können Sie beispielsweise einfach Podman-Container nach Kubernetes migrieren. Dazu müssen Sie zumindest einen Kubernetes-Context einrichten. Podman Desktop konfiguriert den Zugang zu Kubernetes-Clustern automatisch, wenn Sie einen kindbasierten lokalen Kubernetes-Cluster anlegen, einen lokalen OpenShift-Cluster generieren oder den Zugriff auf eine Entwickler-Sandbox konfigurieren. Ist ein Kubernetes-Cluster verfügbar, sehen Sie Details mit einem Rechtsklick auf das Podman-Desktop-Icon ein. Über das Untermenü "Kubernetes" identifizieren Sie den aktuellen Context. Über diese Funktion erfolgt auch die Bereitstellung eines Containers in der Kubernetes-Umgebung.
Eine weitere interessante Eigenschaft von Podman Desktop: Sie können die Umgebung nutzen, um das modulare Podman-System funktional zu erweitern. Bereits bei der Erstinstallation der Desktop-Umgebung haben Sie die Möglichkeit, Erweiterungen einzurichten. Diese ermöglichen beispielsweise die Unterstützung von virtuellen Maschinen, etwa von Lima-Installationen. Außerdem ist die Integration von Drittwerkzeugen wie Kind und des oben besprochenen Docker Compose möglich.
Die verfügbaren Add-ons sind über das Menü "Extensions" erreichbar. Hier richten Sie beispielsweise "minikube" ein, um eine lokale Kubernetes-Umgebung zu verwenden. Mit "Podman AI Lab" erweitern Sie Podman Desktop um LLM-Unterstützung (Large Language Models).
Außerdem konfigurieren Sie hier das Zusammenspiel mit Red Hat OpenShift. Die BootC-Erweiterung (Bootable Container) erlaubt das Erstellen von bootfähigen Betriebssystemen aus einer Containerdatei. Sie können insbesondere Container in VMs sowie in ISO- und RAW-Images umwandeln.
Fazit
Experten gehen heute davon aus, dass jedes zweite Unternehmen etwa die Hälfte seiner Geschäftsanwendungen in Container-Umgebungen ausführt - Tendenz steigend. Vor diesem Hintergrund ist der Einsatz von Werkzeugen wie Podman längst unternehmenskritisch. Podman Desktop leistet dabei einen bedeutenden Beitrag, denn die Software vereinfacht Standardaufgaben mit Podman.