HeadlinesBriefing HeadlinesBriefing.com

Docker ist seltsam: Ich baue meine eigene Container-Runtime

Hacker News •
×

Ich habe mich aus Spaß entschieden, meine eigene Container-Runtime zu bauen, und auch wenn ich noch ganz am Anfang stehe, habe ich gelernt, dass Docker seltsam ist. Hier sind einige merkwürdige Dinge, die ich über Docker gelernt habe.

Container sind nicht echt. Anders als VMs sind Container lediglich Prozesse mit besonderen Einschränkungen. Ihr Kernel führt diesen Prozess weiterhin aus, und Sie können ihn in /proc finden. Es gibt kein einzelnes Linux-Container-Feature – Container sind tatsächlich 5 verschiedene Linux-Kernel-Features im Trenchcoat. Namespaces verbergen, was Host und Container sehen können, cgroups begrenzen die Ressourcennutzung, und Netzwerkmagie isoliert das Netzwerk eines Containers.

Images sind nur Ordner. Docker legt sie irgendwo ab und ruft chroot (oder pivot_root) auf, um diesen Ordner zum neuen Root-Verzeichnis des Containers zu machen. Go ist für eine Container-Runtime irgendwie eine schlechte Sprache. Die Runtime von Docker, runc, ist in Go geschrieben, und die Designentscheidungen von Go machen sie weniger geeignet. Die Go-Runtime ist nativ multithreaded, aber viele Linux-Syscalls benötigen eine Single-Thread-Umgebung, daher hat runc ein C-Modul, das läuft, bevor Go initialisiert wird. Go hat außerdem kein fork, daher führt runc exec auf /proc/self/exe aus, um einen fork anzunähern.

Docker erfordert root. Viele Linux-Kernel-APIs benötigen root, daher läuft der Docker-Daemon normalerweise als root. Rootless-Runtimes müssen unter Umständen den gesamten Netzwerk-Stack im Userspace neu implementieren. Lernen macht Spaß! Ein eigenes Werkzeug zu schreiben, das man selbst benutzt, ist eine großartige Möglichkeit, es zu verstehen.

Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing