HeadlinesBriefing HeadlinesBriefing.com

Docker est bizarre : je construis mon propre runtime de

Hacker News •
×

J'ai décidé de créer mon propre runtime de conteneurs pour le plaisir, et même si je n'en suis qu'aux débuts, j'ai appris que Docker est bizarre. Voici quelques choses étranges que j'ai apprises sur Docker.

Les conteneurs ne sont pas réels. Contrairement aux VM, les conteneurs ne sont que des processus soumis à des restrictions particulières. Votre noyau exécute toujours ce processus, et vous pouvez le trouver dans /proc. Il n'existe pas de fonctionnalité unique de conteneurs Linux : les conteneurs sont en réalité 5 fonctionnalités différentes du noyau Linux déguisées en trench-coat. Les namespaces cachent ce que l'hôte et le conteneur peuvent voir, les cgroups limitent l'utilisation des ressources, et une magie réseau isole le réseau d'un conteneur.

Les images ne sont que des dossiers. Docker les place quelque part et appelle chroot (ou pivot_root) pour faire de ce dossier la nouvelle racine du conteneur. Go est en quelque sorte un langage terrible pour un runtime de conteneurs. Le runtime de Docker, runc, est écrit en Go, et les choix de conception de Go le rendent moins adapté. Le runtime de Go est nativement multithread, mais de nombreux appels système Linux nécessitent un environnement monothread, donc runc dispose d'un module C qui s'exécute avant l'initialisation de Go. Go n'a pas non plus de fork, donc runc exécute /proc/self/exe pour approximer un fork.

Docker nécessite les droits root. De nombreuses API du noyau Linux exigent root, donc le démon Docker fonctionne généralement en root. Les runtimes sans root peuvent devoir réimplémenter toute la pile réseau en espace utilisateur. Apprendre est amusant ! Écrire votre propre version d'un outil que vous utilisez est une excellente façon de le comprendre.

Source: Hacker News · Résumé par HeadlinesBriefing