Maison  >  Article  >  Opération et maintenance  >  Quelles sont les deux technologies de base de Docker ?

Quelles sont les deux technologies de base de Docker ?

青灯夜游
青灯夜游original
2022-05-11 12:57:122744parcourir

Deux technologies de base : 1. « Espaces de noms Linux », qui est une encapsulation et une isolation des ressources système globales, permettant aux processus dans différents espaces de noms d'avoir des ressources système globales indépendantes ; 2. « Groupes de contrôle », qui peuvent isoler la machine hôte physique ; ressources pour mettre en œuvre des quotas et des mesures de ressources.

Quelles sont les deux technologies de base de Docker ?

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, version docker-1.13.1, ordinateur Dell G3.

Docker est un projet cloud open source basé sur le langage Go.

Docker résout le problème de cohérence entre l'environnement de développement, l'environnement de test et l'environnement de production grâce à la technologie de virtualisation, permettant à l'application et à son environnement d'exécution d'atteindre l'objectif de « Créer, expédier et exécuter n'importe quelle application, n'importe où ». Technologie de virtualisation de conteneurs qui facilite l'intégration continue et facilite la publication et l'expansion globales.

Les deux technologies principales de Docker : les espaces de noms et les groupes de contrôleurs.

1. Isolation : espace de noms Linux (ns)

Les espaces de noms Linux sont une sorte d'encapsulation et d'isolation des ressources système globales, de sorte que les processus dans différents espaces de noms disposent de ressources système globales indépendantes, la modification des ressources système ne fera que affectent les processus dans l’espace de noms actuel et n’ont aucun impact sur les processus dans d’autres espaces de noms. Ces ressources incluent : les arborescences de processus, les interfaces réseau, les points de montage, la communication inter-processus et d'autres ressources. Les processus dans le même espace de noms peuvent détecter les changements les uns des autres et ne savent rien des processus externes. Cela peut donner au processus dans le conteneur l’illusion qu’il se trouve dans un système indépendant, atteignant ainsi l’objectif d’isolement.

Chaque instance d'utilisateur est isolée les unes des autres et ne s'affecte pas les unes les autres. La méthode donnée par la méthode générale de virtualisation matérielle est VM, tandis que la méthode donnée par LXC est le conteneur, et pour être plus précis, c'est l'espace de noms du noyau. Parmi eux, pid, net, ipc, mnt, uts, user et d'autres espaces de noms contiendront le processus, le réseau, le message, le système de fichiers, l'UTS ("UNIX Time-sharing System) du conteneur ") et l'espace utilisateur est isolé.

1), espace de noms pid

Les processus des différents utilisateurs sont isolés via l'espace de noms pid, et différents espaces de noms peuvent avoir le même pid. Le processus parent de tous les processus LXC dans Docker est le processus Docker, et chaque processus LXC a un espace de noms différent. Dans le même temps, puisque l'imbrication est autorisée, Docker dans Docker peut être facilement implémenté.

2), espace de noms net

Avec l'espace de noms pid, les pids de chaque espace de noms peuvent être isolés les uns des autres, mais le port réseau partage toujours le port hôte. L'isolation du réseau est obtenue via l'espace de noms réseau. Chaque espace de noms réseau possède des périphériques réseau, des adresses IP, des tables de routage IP et des répertoires /proc/net indépendants. De cette manière, le réseau de chaque conteneur peut être isolé. Par défaut, docker utilise veth pour connecter la carte réseau virtuelle du conteneur à un pont docker : docker0 sur l'hôte.

3) L'interaction de processus dans l'espace de noms ipc

le conteneur utilise toujours la méthode d'interaction inter-processus Linux commune (communication interprocessus - IPC), y compris les sémaphores communs, les files d'attente de messages et la mémoire partagée. Cependant, contrairement à une machine virtuelle, l'interaction inter-processus d'un conteneur est en réalité une interaction inter-processus avec le même espace de noms pid sur l'hôte. Les informations sur l'espace de noms doivent donc être ajoutées lors de la demande de ressources IPC - chaque ressource IPC a un nom unique. -ID de bit.

4), l'espace de noms mnt

est similaire au chroot, plaçant un processus dans un répertoire spécifique pour son exécution. L'espace de noms mnt permet aux processus dans différents espaces de noms de voir différentes structures de fichiers, de sorte que les répertoires de fichiers vus par les processus dans chaque espace de noms soient isolés. Contrairement au chroot, les informations dans /proc/mounts du conteneur dans chaque espace de noms ne contiennent que le point de montage de l'espace de noms.

5), espace de noms uts

L'espace de noms UTS ("UNIX Time-sharing System") permet à chaque conteneur d'avoir un nom d'hôte et un nom de domaine indépendants, de sorte qu'il puisse être considéré comme un nœud indépendant sur le réseau plutôt que comme un Hébergez un processus sur.

6), espace de noms d'utilisateur

Chaque conteneur peut avoir un identifiant d'utilisateur et de groupe différent, ce qui signifie que l'utilisateur à l'intérieur du conteneur peut être utilisé pour exécuter le programme à la place de l'utilisateur sur l'hôte.

2. Limitations des ressources : groupes de contrôle (cgroups)

L'espace de noms isole le système de fichiers, le réseau et les processus de la machine hôte pour le processus nouvellement créé, mais l'espace de noms ne peut pas le faire à notre place. isolement. Mais si vous exécutez plusieurs conteneurs sur la même machine qui ne savent rien les uns des autres ni de la machine hôte, ces conteneurs occupent conjointement les ressources physiques de la machine hôte.

Les groupes de contrôle (CGroups en abrégé) sont capables d'isoler les ressources physiques sur la machine hôte, telles que le processeur, la mémoire, les E/S disque et la bande passante réseau. Chaque CGroup est un groupe de processus restreints par les mêmes normes et paramètres. Il existe une relation hiérarchique entre les différents CGroups, ce qui signifie qu'ils peuvent hériter de certaines normes et paramètres pour restreindre l'utilisation des ressources de leur classe parent.

cgroups met en place des quotas et une mesure des ressources. L'utilisation de cgroups est très simple. Il fournit une interface de type fichier. Créez un nouveau dossier dans le répertoire /cgroup pour créer un nouveau fichier de tâches dans ce dossier et écrivez le pid dans le fichier pour réaliser le processus. . contrôle des ressources. les groupes peuvent limiter les ressources des neuf sous-systèmes de blkio, cpu, cpuacct, cpuset, devices, congélateur, mémoire, net_cls et ns. Voici une description détaillée de chaque sous-système :

  • blkio Les paramètres de ce sous-système limitent chaque bloc. contrôle d'entrée et de sortie de l'appareil. Par exemple : disque, CD, USB, etc.

  • cpu Ce sous-système utilise le planificateur pour fournir un accès CPU aux tâches du groupe de contrôle.

  • cpuacct génère des rapports sur les ressources CPU pour les tâches du groupe de contrôle.

  • cpuset S'il s'agit d'un processeur multicœur, ce sous-système allouera un processeur et une mémoire séparés pour les tâches du groupe de contrôle.

  • devices Autoriser ou refuser l'accès aux tâches du groupe de contrôle aux appareils.

  • freezer met en pause et reprend les tâches du groupe de contrôle.

  • memory définit la limite de mémoire de chaque groupe de contrôle et génère des rapports sur les ressources mémoire.

  • net_cls marque chaque paquet réseau pour plus de commodité.

  • ns sous-système d'espace de noms.

Il existe également une certaine relation entre les neuf sous-systèmes ci-dessus. Veuillez vous référer à la documentation officielle pour plus de détails.

Apprentissage recommandé : "Tutoriel vidéo Docker"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn