Binkski - stock.adobe.com
Ist Docker tot? Wie die Zukunft der Container aussieht
Neben Docker gibt es weitere Dienste, die sich für Container und deren Bereitstellung eignen. Dieser Beitrag erklärt, warum Docker immer unbeliebter wird.
Docker war für lange Zeit ein Synonym für Container und Containerbereitstellung. Nachdem Red Hat 2019 Docker durch Podman ersetzt hat, SUSE es auch nicht mehr einsetzt und der Dienst von Mirantis gekauft wurde, sinkt die Begeisterung allerdings. Branchenintern ist Docker dennoch noch weit verbreitet.
Wir erklären, wieso Docker inzwischen auf dem Rückzug ist und wo es auch heute noch seinen Platz in modernen Infrastrukturen findet.
Kubernetes – die neue Nummer eins?
Orchestrierungslösungen wie Kubernetes machen Entwickler und Unternehmen unabhängig von einzelnen Softwarekomponenten einer Containerinfrastruktur. Sie helfen dabei, eine Containerumgebung bereitzustellen und zu verwalten, unabhängig von der eingesetzten Containerlösungen. Docker hat mit Docker Swarm versucht, Kubernetes etwas entgegenzusetzen; besonders erfolgreich war das jedoch nicht. Kubernetes gehört mit einem Marktanteil von 80 bis 90 Prozent zum De-facto-Standard, wenn es um das Orchestrieren von Containern geht und das schadet Docker.
Als Orchestrator führt Kubernetes selbstverständlich nicht die Laufzeit der Container. Dafür ist eine weitere Software zuständig, die an Kubernetes angebunden ist. Kubernetes steuert nur, welche Container die Laufzeitumgebung wann und wie bereitstellt. Administratoren kommen durch Kubernetes im Grunde kaum mit dieser niedrigeren Ebene der Containerumgebung in Kontakt, denn das übernimmt Kubernetes oder eine andere Orchestrierungsumgebung (häufig auf Basis von Kubernetes) wie VMware Tanzu, HPE Greenlake oder Red Hat OpenShift.
Das Problem für Docker ist dabei, dass Kubernetes Docker schon seit Ende 2020 nicht mehr unterstützt, so dass Docker überall dort nicht existiert, wo Kubernetes im Einsatz ist.
Das Container Runtime Interface und Docker
Der Grund dafür, dass Docker zunehmend an den Rand gedrängt wird, ist das Container Runtime Interface (CRI). Dieser Standard für die Kommunikation zwischen Orchestrierungslösung und Laufzeitumgebung wird von Docker nicht unterstützt. Das war unter anderem der Auslöser für Kubernetes, sich von Docker zu trennen.
Docker steuert über den Docker-Daemon dockerd die Kommunikation mit den Clients. Hierüber lassen sich Container zum Beispiel starten oder beenden. Läuft dockerd mit Root-Rechten, ergeben sich verschiedene Sicherheitsrisiken. Um dieses Problem zu beheben, gibt es in Docker seit 2019 den User-Modus mit reduzierten Rechten – zu diesem Zeitpunkt hatten jedoch die Nutzer schon lange auf das Problem hingewiesen, so dass viele das Update als zu spät wahrgenommen haben.
Auch im User-Modus macht Docker immer wieder Probleme oder verbraucht zu viele Ressourcen. Podman, eine der immer populäreren Alternativen, auf die auch Red Hat inzwischen setzt, hat diese Schwierigkeiten nicht.
Früher bildete Docker die Schnittstelle zwischen Kubernetes und seiner Standardlaufzeit containerd. Mittlerweile kann Kubernetes direkt mit containerd arbeiten, so dass Docker in Kubernetes nicht mehr notwendig ist. Docker ist aber noch lange nicht tot.
Docker und Podman im Vergleich
Der Vorteil von Docker besteht nicht darin, Container zu orchestrieren. Das kann Kubernetes besser. Auch als Laufzeitumgebung für Container ist Docker nicht notwendig, denn das erledigt containerd oder eine andere Laufzeitumgebungen wie Podman. Podman gehört mittlerweile zu den beliebten Laufzeitumgebungen für Container, insbesondere mit Kubernetes.
Ursprünglich wurde Podman von Red Hat als Debugging-Tool für das Engine Container Runtime Interface entwickelt. Mittlerweile umfasst Podman eine vollständige eigene Laufzeit und ist daher ideal für die Zusammenarbeit mit Kubernetes. Podman nutzt im Gegensatz zu Docker für die Kommunikation keinen Daemon, sondern führt Container über eine Fork-Exec-Funktion als untergeordnete Prozesse aus. Sobald ein Container über containerd gestartet ist, zum Beispiel mit runc, hängt Podman ein kleines Programm an, das den Container überwacht. Es übernimmt die Aufgabe des Docker-Daemons.
Dockers Vorteil: Container-Images
Seine Stärke spielt Docker vor allem als Werkzeug für das Erstellen und Verwalten von Container-Images aus. Mit Docker entwickeln und erstellen Entwickler und Admins Container-Images, die sie sofort bereitstellen können. Das bietet in vielen Umgebungen Vorteile, besonders, wenn Sie eh kein Kubernetes brauchen oder möchten.
Der von Docker in 2015 initiierte Standard für die Spezifikation von Images und Containern wird von immer mehr Anbietern unterstützt, auch vom Konkurrenten Podman. Verschiedene Lösungen, die OCI nutzen, können Container und Images untereinander austauschen. Buildah und kaniko setzen ebenfalls auf OCI und lassen sich daher mit Kubernetes genauso nutzen wie zusammen mit Docker.
Auf diesem Wege verwenden Sie somit Dockerfiles und Docker-Container-Images sowie Docker-Registrys in Kubernetes. Docker spielt also für Kubernetes-Nutzer zwar eine untergeordnete Rolle, hat aber in bestimmten Bereichen immer noch die Nase vorn. Es bleibt in Zukunft als alleinstehende Containerumgebung relevant und ist derzeit noch führend, was das Erstellen und Verwalten von Images betrifft.
Docker ist nicht mehr alternativlos
Docker ist aus der Containerwelt nicht wegzudenken. Mittlerweile ist es aber nicht mehr alternativlos, und insbesondere Podman wird zusammen mit Kubernetes immer wichtiger. Hier hat Red Hat einen entscheidenden Einfluss. Wer auf RHEL setzt, nutzt in den meisten Fällen die integrierte Containerlösung und installiert sich keine externe.
Wer aktuell mit Docker arbeitet, sollte sich daher Podman genauer anschauen, die Syntax ist im Grunde identisch. Wer sich am Ende auf dem Markt durchsetzen wird, ist im Moment unklar. Allerdings wird wohl der Marktanteil von Docker weiterhin sinken, nicht zuletzt wegen Podman.