Qu'est-ce que Conteneur ?

Unité d'exécution qui regroupe une application avec les bibliothèques et les réglages dont elle a besoin, et l'exécute isolée des autres processus tout en partageant le noyau de l'OS de l'hôte. Sous Linux, il repose sur les espaces de noms (namespaces), qui séparent la vue des identifiants de processus, du réseau, des points de montage, etc., et sur les cgroups, qui limitent l'utilisation du CPU et de la mémoire. Il est plus léger et plus rapide à démarrer qu'une machine virtuelle qui démarre un OS complet, mais, comme il partage le noyau, il ne peut pas exécuter le noyau d'un autre type d'OS que celui de l'hôte. Les conteneurs sont créés à partir d'images de conteneur, et créés et gérés avec des outils comme Docker et Kubernetes.

Nom japonais: コンテナ

« Conteneur » apparaît dans 19 questions d'entraînement réparties sur 2 thèmes, dont Bases du cloud et des conteneurs, Système d'exploitation et matériel.

Domaine: Bases du cloud et des conteneurs

Différence avec une machine virtuelle

Les machines virtuelles exécutent chacune un OS, noyau compris, sur un hyperviseur. Un conteneur ne démarre pas d'OS ; il s'exécute comme un processus isolé sur le noyau de l'hôte : il démarre donc souvent en moins d'une seconde, et l'on peut en loger beaucoup sur une même machine. En revanche, son isolation repose sur des fonctions du noyau et n'est pas aussi forte que celle d'une machine virtuelle. Quand une isolation forte est nécessaire, on exécute parfois les conteneurs dans des machines virtuelles légères.

Système de fichiers d'un conteneur

Le système de fichiers d'un conteneur est une couche inscriptible propre à ce conteneur, empilée sur les couches de l'image, en lecture seule. Quand un fichier de l'image est modifié, il est d'abord copié dans la couche inscriptible, puis modifié (copie sur écriture). La couche inscriptible disparaît quand le conteneur est supprimé : les données à conserver sont donc placées dans un stockage externe comme un volume.

Concevoir pour des conteneurs jetables

Les conteneurs sont conçus en partant du principe qu'un conteneur défaillant n'est pas réparé, mais recréé à partir de l'image et remplacé. La configuration est fournie de l'extérieur, par exemple par des variables d'environnement, les journaux sont écrits sur la sortie standard pour que la plateforme les collecte, et l'état est conservé dans des bases de données ou du stockage. Il devient ainsi facile de changer le nombre de conteneurs ou de mettre en place une nouvelle version.

S'entraîner : questions sur Conteneur

Quelle est la différence entre conteneurs et machines virtuelles ?

  1. AChaque conteneur possède son propre noyau d’OS, tandis que les machines virtuelles partagent le noyau
  2. BLes conteneurs s’exécutent sur un hyperviseur, tandis que les machines virtuelles fonctionnent avec les seules fonctions de l’OS
  3. CLes conteneurs partagent le noyau, tandis que les machines virtuelles exécutent leur propre OS
Afficher la réponse et l'explication

Réponse : C. Les conteneurs partagent le noyau, tandis que les machines virtuelles exécutent leur propre OS

Les conteneurs partagent le noyau d’un seul OS tout en séparant et isolant par groupe la vue des fichiers, les processus, le réseau, les ressources utilisables, etc. Sans démarrage d’un OS complet, ils sont légers et démarrent vite. Les machines virtuelles exécutent sur un hyperviseur des OS comportant chacun leur propre noyau : plus lourdes, elles offrent une isolation plus forte et peuvent faire tourner des OS d’un autre type. C’est du côté des conteneurs que le noyau est partagé ; attention aux choix qui inversent la description.

Parmi les fonctions du noyau Linux qui permettent les conteneurs, quelle association entre les espaces de noms (namespaces), les cgroups (groupes de contrôle) et leur rôle est correcte ?

  1. AEspaces de noms : séparent ce qu'un processus voit (identifiants de processus, réseau, points de montage, etc.) ; cgroups : limitent et mesurent l'utilisation de ressources comme le CPU et la mémoire
  2. BEspaces de noms : limitent et mesurent l'utilisation de ressources comme le CPU et la mémoire ; cgroups : séparent ce qu'un processus voit (identifiants de processus, réseau, points de montage, etc.)
  3. CEspaces de noms : démarrent un noyau distinct pour chaque conteneur afin de les isoler les uns des autres ; cgroups : créent un CPU virtuel pour chaque conteneur et émulent le matériel
Afficher la réponse et l'explication

Réponse : A. Espaces de noms : séparent ce qu'un processus voit (identifiants de processus, réseau, points de montage, etc.) ; cgroups : limitent et mesurent l'utilisation de ressources comme le CPU et la mémoire

Un conteneur est un processus ordinaire qui s'exécute sur le noyau de l'hôte et que deux mécanismes isolent. Les espaces de noms répartissent en groupes les identifiants de processus, le réseau, les points de montage (la vue du système de fichiers), le nom d'hôte, etc., de sorte que les processus d'un conteneur ne voient que leur propre part. Les cgroups limitent le temps CPU et la quantité de mémoire qu'un groupe de processus peut utiliser, et en mesurent l'utilisation. Ce sont deux fonctions du noyau : un conteneur ne démarre donc pas d'autre noyau et n'émule pas non plus de matériel.

Questions fréquentes

Un conteneur peut-il utiliser une autre distribution Linux que l'hôte ?

Oui. Une image contient des fichiers de l'espace utilisateur comme des commandes et des bibliothèques, et ceux-ci peuvent provenir d'une autre distribution. Le noyau, lui, est partagé avec l'hôte : uname -r affiche donc le noyau de l'hôte, et les fonctions absentes du noyau de l'hôte ne sont pas disponibles.

Pourquoi des conteneurs Linux peuvent-ils tourner sous Windows ou macOS ?

Des outils comme Docker Desktop font tourner une petite machine virtuelle Linux et y exécutent les conteneurs Linux. Les conteneurs Linux ont toujours besoin d'un noyau Linux quelque part.

« Conteneur » dans les explications

Questions mentionnant « Conteneur » (19)

  1. Quelle est la différence entre conteneurs et machines virtuelles ?
  2. Parmi les fonctions du noyau Linux qui permettent les conteneurs, quelle association entre les espaces de noms (namespaces), les cgroups (groupes de contrôle) et leur rôle est correcte ?
  3. Sur un hôte Linux, Docker sert à démarrer un conteneur à partir d'une image fondée sur une autre distribution que celle de l'hôte, et l'on y exécute uname -r (commande qui affiche la version du noyau) et cat /etc/os-release (commande qui affiche les informations sur la distribution). Quelle description des résultats est correcte ?
  4. Quelle description de la relation entre une image de conteneur et un conteneur est correcte ?
  5. Dans un conteneur démarré à partir d'une image, on modifie le fichier de configuration /etc/app.conf, qui fait partie de l'image. Quelle description de ce qui se passe avec le mécanisme de stockage habituel de Docker (comme overlay2) est correcte ?
  6. Pour le Dockerfile ci-dessus, quelle association entre la commande exécutée lors de la construction de l'image avec docker build et la commande exécutée lors du démarrage d'un conteneur avec docker run est correcte ?
  7. Une image nommée pinger, construite à partir du Dockerfile ci-dessus, est démarrée par docker run pinger example.com. Quelle est la commande exécutée dans le conteneur ?
  8. Un conteneur est démarré par la commande ci-dessus à partir de l'image nginx, un serveur web qui écoute sur le port 80. L'adresse IP de l'hôte est 192.0.2.10, et il n'y a aucune restriction comme un pare-feu. Quelle est l'URL correcte pour joindre ce serveur web depuis un navigateur sur un autre PC du même réseau ?
  9. Dans Docker, quelle description des volumes nommés et des montages bind (bind mounts), qui servent à conserver les données écrites par un conteneur, est correcte ?
  10. Dans Kubernetes, quelle est la plus petite unité déployée et gérée, qui regroupe un ou plusieurs conteneurs partageant la même adresse IP et les mêmes volumes ?
  11. Une application web ne peut pas traiter de requêtes pendant environ 60 secondes après son démarrage, le temps de charger son cache, et renvoie 503 sur /ready pendant ce temps. Quelle description de l'effet de l'ajout des réglages ci-dessus au conteneur du Pod est correcte ?
  12. Dans un Deployment dont les conteneurs des Pods ont les réglages ci-dessus, quatre Pods tournent et chacun utilise 400m (0,4 cœur) de CPU. La cible d'utilisation CPU du HorizontalPodAutoscaler est de 60 %, et le nombre de Pods nécessaire est calculé par ⌈nombre actuel × utilisation actuelle ÷ utilisation cible⌉. Combien de Pods faut-il ?
  13. Dans Kubernetes, quelle description des requests et des limits de ressources définies pour un conteneur est correcte ?
  14. Un nœud dispose de ressources allouables de 4 cœurs de CPU et de 8 GiB de mémoire. Le conteneur de chaque Pod a pour requests 500m de CPU et 1,5 GiB de mémoire, et pour limits 1 cœur de CPU et 2 GiB de mémoire. Il n'y a ni autres Pods ni réservations pour le système. Quel est le nombre maximal de Pods que l'on peut placer sur ce nœud ?
  15. Comme ci-dessus, la destination de connexion à la base de données n'est pas écrite dans l'image, mais transmise sous forme de variable d'environnement au démarrage du conteneur. Quel est le principal avantage de cette conception ?

Termes associés

Pod Docker Kubernetes Variable d'environnement Hyperviseur Temps CPU Image de conteneur Copie sur écriture (copy-on-write) JSON (JavaScript Object Notation) Argument

Retour au glossaire