Aller au contenu

Conteneur

Infrastructure

Processus isolé qui embarque une application avec ses dépendances et partage le noyau du système hôte. Plus léger qu'une machine virtuelle, il démarre en quelques secondes et se relance à l'identique sur tout hôte au noyau compatible.

Schéma de séquence entre quatre acteurs : Registre, Moteur de conteneurs, Noyau hôte et Conteneur. Étape 1 : le registre fournit au moteur de conteneurs l'image téléchargée. Étape 2 : le moteur demande au noyau hôte de créer les namespaces et les cgroups. Étape 3 : le noyau hôte démarre le conteneur, un processus isolé. Étape 4 : le conteneur fait ses appels système directement sur le noyau hôte, qu'il partage.

Isolation par le noyau : Les namespaces donnent au processus sa propre vue des processus, du réseau et du système de fichiers, et les cgroups plafonnent sa consommation de CPU et de mémoire. Aucun système d'exploitation invité : tous les conteneurs d'une machine utilisent le même noyau.

Image et instance : L'image est un modèle figé, découpé en couches en lecture seule. Le conteneur en est une instance en cours d'exécution, avec une couche inscriptible éphémère : ce qu'on y écrit disparaît avec lui, sauf si on monte un volume.

Portabilité : L'image fige l'application et ses bibliothèques, ce qui rend le déploiement reproductible d'un poste à la production. Le conteneur a fait disparaître le « ça marche sur ma machine » pour le remplacer par « ça marche dans mon image », ce qui reste un progrès, mais un progrès modeste.

Frontière de sécurité : Partager le noyau signifie qu'une faille du noyau peut traverser la cloison. Un conteneur lancé en root ou en mode privilégié n'isole presque plus rien. Un conteneur confine du code de confiance, il ne sépare pas des locataires hostiles : quand l'isolation doit être forte, on ajoute une machine virtuelle ou un moteur d'exécution qui n'expose pas le noyau de l'hôte (gVisor, Kata Containers).

Ce qui arrive si on s'en passe

Sans conteneur, l'application s'exécute directement sur l'hôte, au milieu des autres processus. Une faille exploitée dans ce service donne alors accès à tout ce que son compte peut atteindre sur la machine : fichiers des autres applications, secrets stockés localement, processus voisins visibles et, sous le même utilisateur, manipulables. Les dépendances sont installées au niveau du système : une mise à jour destinée à une application peut en casser une autre, et une bibliothèque vulnérable reste partagée par tous les services qui l'utilisent. L'environnement n'est plus reproductible ; ce qui a été testé ne correspond pas forcément à ce qui tourne en production, et reconstruire un service à l'identique après un incident devient plus lent et moins fiable. À garder en tête : le conteneur réduit l'exposition sans constituer une frontière absolue, puisque le noyau de l'hôte reste partagé.

Explication de la marmotte

Sur un cargo, on range les marchandises dans de grandes boîtes métalliques qui ont toutes la même taille. Peu importe ce qu'il y a dedans : la grue, le camion et le bateau savent les manipuler. Pour un programme, c'est pareil. On le range dans une boîte avec tout ce dont il a besoin pour fonctionner, comme ses outils et ses réglages. Ensuite, on peut lancer cette boîte sur n'importe quel ordinateur, et le programme marche de la même façon. Plusieurs boîtes peuvent tourner sur le même ordinateur sans se mélanger. Chacune croit être seule, alors qu'elles partagent toutes le même moteur en dessous.

Où ce terme est utilisé

← Tout le glossaire