GNU/Linux >> Tutoriels Linux >  >> Linux

Que contient une image/un conteneur Docker ?

Il peut être utile de distinguer les images et conteneurs (documents). Une image est statique et vit uniquement sur le disque. Un contenant est une instance en cours d'exécution d'une image et il inclut sa propre arborescence de processus ainsi que de la RAM et d'autres ressources d'exécution.

Une image est un groupement logique de couches plus des métadonnées sur ce qu'il faut faire lors de la création d'un conteneur et comment assembler les couches. Une partie de ces métadonnées est que chaque couche connaît l'ID de son parent.

Alors, qu'est-ce qui se passe dans une couche? Les fichiers (et répertoires) que vous avez ajoutés au parent. Il existe également des fichiers spéciaux ("whiteout") qui indiquent que quelque chose a été supprimé du parent.

Lorsque vous docker run une image, docker crée un conteneur :il décompresse toutes les couches dans le bon ordre, créant un nouveau système de fichiers "racine" séparé de l'hôte. docker lit également les métadonnées de l'image et démarre le "point d'entrée" ou la "commande" spécifié lors de la création de l'image - qui démarre une nouvelle sous-arborescence de processus. De l'intérieur du conteneur, ce premier processus ressemble à la racine de l'arbre, mais depuis l'hôte, vous pouvez voir qu'il s'agit d'un sous-arbre de processus.

Le système de fichiers racine est ce qui différencie une distribution Linux d'une autre (il peut également y avoir des différences de module de noyau et des différences de système de fichiers de démarrage/chargeur de démarrage, mais celles-ci sont généralement invisibles pour les processus en cours d'exécution). Le noyau est partagé avec l'hôte et, en fait, gère toujours ses responsabilités habituelles à l'intérieur du conteneur. Mais le système de fichiers racine est différent, et donc lorsque vous êtes à l'intérieur du conteneur, il ressemble à la distribution qui se trouvait dans l'image Docker.

Le conteneur possède non seulement son propre système de fichiers et sa propre arborescence de processus, mais également sa propre interface réseau logique et, éventuellement, sa propre allocation de RAM et de temps CPU. Vous contrôlez cependant le conteneur, en tant qu'opérateur, vous pouvez donc décider de partager l'interface réseau de l'hôte avec le conteneur, lui donner un accès illimité à la RAM et au processeur, et même monter des périphériques, des fichiers et des répertoires de l'hôte dans le récipient. La valeur par défaut est de garder les choses séparées, mais vous avez le pouvoir de casser le modèle d'isolation autant que nécessaire.


Docker est un wrapper sur LXC Linux Containers et la documentation correspondante vous permettra de savoir en détail ce qui est partagé et ce qui ne l'est pas.

En général, la machine hôte voit/contient tout ce qui se trouve à l'intérieur des conteneurs, du système de fichiers aux processus, etc. Vous pouvez émettre une commande ps sur la machine virtuelle hôte et voir les processus à l'intérieur du conteneur.

N'oubliez pas que les conteneurs Docker ne sont pas des machines virtuelles - par conséquent, tout s'exécute en mode natif sur l'hôte et utilise directement le noyau de l'hôte. Chaque conteneur a son propre espace de noms d'utilisateur (similaire aux anciennes prisons racine). Il existe des outils/fonctionnalités qui garantissent que les conteneurs ne voient que leurs propres processus, ont leur propre système de fichiers superposé sur le système de fichiers hôte et une pile réseau qui se dirige vers la pile réseau hôte.


Linux
  1. Comment exécuter un programme dans un conteneur Docker ?

  2. Extraire le fichier de l'image Docker ?

  3. Transférer le port hôte vers le conteneur Docker

  4. Comment déterminer si un processus s'exécute dans lxc/Docker ?

  5. Docker peut-il s'exécuter dans un conteneur Linux ?

Image Docker vs conteneur :les principales différences

Comment installer l'image AlmaLinux 8 dans le conteneur Docker

Qu'est-ce que Docker ? Comment ça marche?

Qu'est-ce qu'un manifeste d'image Docker ?

Comment se connecter à Localhost dans un conteneur Docker

Que faire si un conteneur Docker se ferme immédiatement