Docker ist seltsam: Ein Entwickler baut seine eigene Container-Runtime und entdeckt, wie seltsam Docker wirklich ist

Docker is weird

Ein Entwickler hat aus Spaß eine eigene Container-Runtime geschrieben und dabei gelernt, dass Docker auf überraschenden Grundlagen steht: Container sind keine echten VMs, sondern nur Prozesse mit speziellen Einschränkungen. Images sind lediglich Ordner, die per chroot zum neuen Root-Verzeichnis werden. Die Runtime runc ist in Go geschrieben, obwohl Go mit seiner Multithreading-Architektur und fehlendem fork für diese Aufgabe eigentlich ungeeignet ist. Zudem läuft der Docker-Daemon meist als root – ein oft übersehenes Sicherheitsrisiko.

Es gibt nicht wirklich ein Linux-Feature, das einfach nur „Container“ heißt. Stattdessen sind Container eigentlich fünf verschiedene Linux-Kernel-Features in einem Trenchcoat.
  1. shykes

    Hi, ich bin der Erfinder von Docker und bin auf diesen Beitrag gestoßen. Es ist immer wieder lustig zu sehen, wie andere Ingenieure darüber nachdenken, wie man ein System entworfen hat. Ich habe viele Jahre nicht mehr an der Entwicklung von Docker mitgewirkt, aber es ist eine lustige Reise in die Vergangenheit.

    Ich beantworte gerne alle Fragen, die ihr habt.

  2. jlhawn

    > Dockers Container-Runtime runc ist in Go geschrieben.

    Ich habe von 2014 bis 2019 bei Docker gearbeitet. Der wichtigste Teil ist tatsächlich in C geschrieben.

    [Ich habe hier einen ganzen Kommentar geschrieben, um zu erklären, wie der Hack funktioniert, weil ich zu sehr darauf fixiert war, wie technisch falsch „in Go geschrieben“ ist. Dann bin ich zurückgegangen, um den Rest des Artikels zu lesen, nur um zu sehen, dass der Absatz direkt danach das irgendwie auf seine eigene Weise erklärt! Das sei mir eine Lehre, immer den Artikel zu Ende zu lesen, bevor ich darüber poste.]

  3. vbezhenar

    Was Docker meiner Meinung nach einzigartig gemacht hat, ist nicht die Container-Technologie selbst. Ich habe vor 20 Jahren chroot benutzt und es funktionierte einwandfrei. Ja, keine Netzwerk-Namespaces; keine Prozess-Namespaces, aber ich glaube nicht einmal, dass diese so wichtig sind.

    Was Docker einzigartig gemacht hat, waren diese drei Dinge:

    1. Das Dockerfile-Konzept. Images Schicht für Schicht bauen. Schichten cachen. Alles in einer einzigen Datei. Es ermöglichte, schnell am Image zu iterieren. Es ermöglichte, CI-Builds effizient umzusetzen.

    2. Das Konzept der Docker-Netzwerkregistry. Universelle Images auf einen Server legen und sie mit der Welt teilen.

    3. Der Momentum. Viele Software, deren Deployment traditionell kompliziert war, erschien plötzlich in Docker-Servern. Ich erinnere mich, wie fasziniert ich war, als ich eine WordPress-Website mit einem winzigen docker-compose deployen konnte. Und wie abgeschlossen es war. Ich konnte einfach jede Spur davon von meinem Host löschen. Ich fühlte mich immer unwohl dabei, verschiedene Dinge auf meinem Host zu installieren, und Docker hat dieses Unbehagen einfach gelöst.

  4. slowin

    Ich bevorzuge meistens Podman, aber Docker ist/war erstaunlich und ein großartiges DX, das auf die sogenannten „5 verschiedenen Linux-Kernel-Features im Trenchcoat“ aufgesetzt wurde. Das ist das Verkaufsargument: Es ist superleichtgewichtig und nutzt die OS-Features voll aus, die es schon gab (oder die entwickelt wurden), aber die unbequem zu benutzen waren und tonnenweise Spezialwissen erforderten.

  5. suprjami

    Es ist immer schön zu sehen, wenn jemand ein komplexes Ding entmystifiziert, indem er die Bausteine lernt, aus denen es gemacht ist.

    Wenn du das weißt, könntest du die fork-exec-Methode von rootless Podman zum Starten von Containern vernünftiger finden. Ich jedenfalls schon. Kein Root, kein Daemon, kein Socket.

    Wenn du mehr über die Linux-Kernel-Namespaces lernen willst, die zusammenwirken, um einen Container zu bilden, ist diese LWN-Serie wirklich gut: https://lwn.net/Articles/531114/

  6. j16sdiz

    Jede Aussage im Artikel lässt mich fragen: „Was ist daran seltsam?“

    Alles in dieser Liste fühlt sich natürlich an, wenn man weiß, wie sich die Dinge über viele Jahre entwickelt haben. Vielleicht werde ich einfach älter und weniger neugierig.

  7. tyingq

    Stöbere in bocker[1] herum. Für technische Leute macht es dieselben Punkte wie der Artikel, und zwar auf eine sehr klare Weise.

    [1] „Docker implementiert in etwa 100 Zeilen Bash“

    https://github.com/p8952/bocker

  8. sreekanth850

    Ich habe angefangen, Docker zu hassen, nachdem ich all den Cargo-Kult auf Reddit gesehen habe. Wann immer jemand fragt, wie man eine App auf Linux deployt, gibt es immer mindestens einen Kommentar, der sagt: Benutz einfach Docker. Am Ende haben wir unser eigenes Deployment-Automatisierungstool für unseren gesamten Stack gebaut, das überhaupt kein Docker verwendet.

Mehr von diesem Tag

2026-10-23