Hey !! et on poursuit sur notre chemin qui mène à la connaissance de docker. Aujourd’hui on va regarder juste d’un oeil l’envers du décor de docker. L’idée c’est de comprendre les couches qui sont en dessous de votre ligne de commande (par exemple : docker run xxx).
Et pour cela il faut se dire que pour lancer un conteneur ou interagir avec lui on va utiliser différents outils, constituant différentes couches. Et pour les ordonner, on va les classer du haut niveau c’est à dire votre CLI vers le bas niveaux ce sont les fonctionnalités linux fondamentales.
Docker CLI
C’est votre ligne de commande avec laquelle vous intéragissez dans le terminal. Vous pouvez donc faire à peu près le maximum de ce qui est possible avec elle.
Pourtant ça ne reste qu’une CLI, une sorte de wrapper à laquelle on va demander des choses et qui exécutera des commandes plus complexes pour nous.
Docker Engine (DockerD)
Alors là on utilise un premier container runtime c’est à dire un outil qui permet de lancer des conteneurs. Mais là encore ce n’est pas lui qui les lance réellement.
Lui il va interagir avec des couches plus basses et ajouter à ces couches des fonctionnalités. On parle aussi de Container Manager.
DockerD c’est notamment lui qui permet les inspects, les builds, la gestion des images simplifiées que permet docker (car en dessous c’est un poil plus complexe).
ContainerD
On est toujours dans une couche considérée comme un container runtime de haut niveau.
Containerd permet de lancer des conteneurs via la couche en dessous et de gérer la partie communication à travers les réseaux, le bridge principal.
RunC
Ah le voilà le container runtime de bas niveau que l’on utilise lorsque l’on tape des commandes avec docker.
RunC est écrit en golang et permet de lancer des conteneurs. C’est à celà que l’on considère que c’est un conteneur de bas niveau.
Mais c’est pas lui qui a les fonctions les plus essentielles ;).
Cgroups et Namespaces
Eh oui finalement sans les Control Groups (CGroups) et les Namespaces, nada. Docker ne peut rien faire et RunC non plus.
Ces outils sont natifs du noay linux.
Les cgroups permettent la gestion et la répartition des ressources sur un host : cpu, mémoire, io, bande passante…
Les namespaces permettent de cloisonner les processus : IPC, PID, UTS…
Et… vous pouvez les utiliser sur des processus standards sur linux sans faire appelle aux conteneurs. Mais bon cela on le reverra plus tard.
Si cet article vous a plu n’hésitez pas à parler de la chaine Xavki autour de vous.