Diesen Artikel habe ich am 26.10.2021 geschrieben. Damals war Docker gerade mal wieder totgesagt worden...
Zufällig habe ich mir gestern die Vorstellung des neuen Nomad Task Drivers für containerd angesehen. Und da im Team dann heute auch nochmal über "Docker und den ganzen Rest" gesprochen wurde, liste ich hier nur kurz meine Erkenntnisse auf, damit ich später wieder darauf verweisen kann.
Docker taucht ja in letzter Zeit immer wieder in der IT-Presse auf. Das hat verschiedene Gründe: Zunächst befeuern Firmen, die schon länger im Wettbewerb mit der Firma Docker stehen, die Presse mit Artikeln, die bei Kunden, die Docker einsetzen wollen, für Mißtrauen sorgen und andererseits gibt es aus verschiedenen Gründen Docker ablösen möchten.
Aus dem obigen Video kann man folgende Information mitnehmen. Docker hat heute zwei Funktionen:
- Die Erstellung von Container Images ("docker build")
- Das Management von Container Instanzen ("docker run")
Dabei delegiert Docker für die zweite Funktion aber alle Aufgaben an containerd, welcher wiederum runc verwendet, um ein Container Image zu instanziieren und zu starten. Die macht übrigens auch Kubernetes so, um Container zu starten.
Natürlich hat es Vorteile den Docker-Daemon aus dem Softwarestapel zu streichen, den man benötigt, um Container Instanzen zu starten und zu verwalten. Der Daemon läuft als root und vergrößert nur die Angriffsfläche des Konstrukts. Außerdem wird die Ausführungszeit verringert, wenn man direkt auf containerd zugreift und Docker auslässt.
Aber natürlich fehlen die Funktionen des Docker-Binaries, mit denen man Container Instanzen verwaltet (startet, stoppt, restartet, etc.), wenn man Docker aus dem Stapel entfernt. Deshalb gibt es innerhalb des containerd-Projektes einen Ersatz für diese Funktionen: nerdctl (ein contaiNERD client). Nerdctl soll offenbar als "drop-in replacement" für docker dienen. Ein "alias docker=nerdctl" soll i. W. dieselbe Funktion - ohne Docker - ermöglichen.
RedHat hat Docker schon länger durch andere Software ersetzt, die alle Funktionen übernimmt:
- podman ("docker run")
- podman-compose ("docker-compose up")
- skopeo
- buildah ("docker build")
- und noch viele andere Tools im Repository containers
Die Funktion von runc kann dort von crun übernommen werden.
Auf einem aktuellen Centos 8 sieht man dann keinen dockerd, containerd und auch keinen containerd-shim mehr. Dort läuft dann conmon und die laufenden Container kann man sich nur mit podman ps
ansehen (alle anderen von docker bekannten Kommandos sollten auch funktionieren). Startet man einen Container mit podman run
wird dieser nach dem Start per conmon überwacht.
Eine interessante Entwicklung scheint es jetzt auch bei FreeBSD zu geben, wo es inzwischen Anstrengungen gibt, OCI kompatible Container bereitzustellen. Auch dort kommt nerdctl zum Einsatz.