Dans Docker, pod désigne une unité d'exécution combinée multi-conteneurs ; pod est une unité de base dans Kubernetes, qui peut être considérée comme une extension ou un conteneur amélioré du conteneur, empaquetant plusieurs processus dans un temps "Name Space", un pod est formé et le packaging des applications des différents processus dans le pod est toujours indépendant.
L'environnement d'exploitation de ce tutoriel : système linux7.3, docker version 19.03, ordinateur Dell G3.
Pod est une unité d'exécution multi-conteneurs combinée et une unité de base dans Kubernetes. Vous pouvez le considérer comme une extension ou un conteneur amélioré d'un conteneur. Pod comprend un conteneur principal et plusieurs conteneurs auxiliaires, qui remplissent ensemble une fonction spécifique. Lorsque plusieurs processus (les conteneurs sont également un processus isolé) sont regroupés dans un espace de noms, un pod est formé. Le packaging applicatif des différents processus dans le Pod est toujours indépendant (chaque conteneur aura sa propre image).
L'importance du Pod est qu'il peut maintenir la relation étroite entre le conteneur principal et le conteneur auxiliaire tout en conservant l'indépendance du conteneur principal. Puisque le conteneur principal et le conteneur auxiliaire ont le même cycle de vie et peuvent être créés et détruits en même temps, les placer dans un Pod peut rendre leur interaction plus efficace.
D'un autre côté, le conteneur principal doit accomplir certaines tâches principales, et d'autres tâches peuvent être courantes et peuvent être emballées séparément et exécutées par le conteneur auxiliaire.
Développer les connaissances
Qu'est-ce qu'un conteneur ?
Il n'est pas facile de donner une définition précise d'un conteneur, car tout le monde regarde les conteneurs sous un angle différent. Selon Liu Junhui, les conteneurs ne sont pas seulement un moyen de fournir des unités informatiques ; ils constituent également une forme d'emballage pour les applications.
- Un conteneur est une unité informatique
En tant qu'unité informatique, un conteneur est identique à un thread, un processus, une machine virtuelle ou une machine physique (comme le montre la figure ci-dessous). Sur une échelle continue, l’isolement, la sécurité et les frais généraux sont plus bas vers la gauche et plus élevés vers la droite. Un conteneur est une unité informatique entre un processus et une machine virtuelle.
Mais toutes les applications ne sont pas adaptées aux conteneurs. Les développeurs peuvent choisir l'unité de calcul la plus adaptée en fonction des caractéristiques et des besoins de leurs propres applications. Par exemple, si votre application est performante, mutuellement fiable et dans la même zone de gestion, alors les threads ou processus suffiront ; mais si votre application est multi-tenant et s'exécute dans le même espace que d'autres applications, alors vous avez besoin ; Il faut réfléchir à la manière d'isoler ces applications en toute sécurité afin d'éviter toute fuite de données ou toute incidence sur les performances. À l’heure actuelle, les conteneurs peuvent être un bon choix.
Le conteneur étant un "processus hautement isolé", il ajoute de nouveaux mécanismes d'isolation basés sur l'isolation des processus généraux. Ces mécanismes d'isolation sont fournis par le noyau Linux, qui incluent certains espaces de noms (Name Spaces) et CGroup. Les espaces de noms peuvent être divisés en trois catégories : réseau, stockage et informatique. Parmi eux, le plus important est l’espace de noms du réseau. Il garantit que le réseau du conteneur est indépendant des autres réseaux de conteneurs. Le système de fichiers que chaque conteneur voit n'est pas partagé avec d'autres conteneurs. Chaque conteneur ne peut voir que son propre ID de processus et les numéros de processus sont également consécutifs.
En ce qui concerne la plus grande différence entre les conteneurs et les machines virtuelles, Liu Junhui estime que par rapport aux machines virtuelles, la plus grande caractéristique des conteneurs est qu'ils n'ont pas leur propre système d'exploitation indépendant, mais partagent un système d'exploitation sur son hôte ; tandis qu'une machine virtuelle s'exécute sur "un serveur distinct". Par conséquent, le coût des conteneurs sera inférieur à celui des machines virtuelles, mais l’isolation fera défaut.
- Un conteneur est une forme d'emballage d'une application
Toute personne ayant de l'expérience dans le développement d'applications sait qu'une application n'est pas un seul fichier exécutable. Une application légèrement plus complexe comprend plusieurs parties, notamment : le code, les fichiers exécutables, dépendances de configuration, dépendances externes (bibliothèques de liens dynamiques), etc.
Ainsi, lors de l'application du package de distribution, vous devez prendre en compte des facteurs tels que la version du système d'exploitation cible, l'architecture du système et les modules dont il dépend. Sinon, l'application modifiera différentes parties du système une fois installée.
En tant que packaging pour une application, sa plus grande caractéristique est qu'il réalise l'indépendance et la portabilité de l'application. Le conteneur lui-même contient toutes les dépendances de l'application, ce qui lui permet de fonctionner sur n'importe quelle infrastructure, quelle que soit la version du système. Les problèmes architecturaux entraînent divers accidents.
En termes simples, Docker peut être considéré comme une plateforme de gestion de conteneurs très performante. La partie la plus importante de Docker est son environnement de gestion en cours d'exécution (comme le montre la figure ci-dessous).
Comme mentionné ci-dessus, un conteneur est une unité informatique, et l'environnement d'exécution Docker est utilisé pour créer, gérer et détruire ces unités informatiques. Lors de la création et de la gestion de ces unités informatiques, vous devez utiliser l'emballage de l'unité informatique (c'est-à-dire son package de distribution de logiciels). Ces packages sont stockés dans son environnement d'exécution sous la forme d'images de conteneurs. Toutes les unités informatiques conteneurs sont traitées. Ces images sont créées.
Mais l'image elle-même aura des exigences de version, de mise à niveau et autres, ce qui implique DockerHub, un autre composant important de Docker. DockerHub est un peu comme l'App Store d'Apple. Il s'agit d'un très grand « marché de conteneurs » et tous les logiciels couramment utilisés peuvent être trouvés sur DockerHub.
Le dernier module important de Docker est l'interface utilisateur et les outils de gestion, qui sont utilisés pour émettre des commandes vers l'environnement d'exécution du conteneur ou afficher l'état. Il vous suffit d'utiliser une commande Docker et d'ajouter quelques paramètres pour créer, supprimer et afficher l'état d'exécution du conteneur.
Ensuite, jetons un coup d'œil au fonctionnement réel de Docker. Nous prendrons l'exécution d'un conteneur Hello World comme exemple pour parler de l'utilisation de Docker. En fait, il vous suffit d'installer Docker et vous pouvez essayer d'exécuter ce conteneur Hello World.
À travers le code suivant, jetons un coup d'œil à ce que Docker a fait :
Nous voyons d'abord que Docker recherche localement la dernière version de l'image Hello World. Il constate que cette image n'existe pas localement et va ensuite vers. DockerHub pour télécharger cette image. Je l'ai téléchargée. Ensuite, l'image est exécutée, puis Docker crée un tel conteneur en arrière-plan.
L'émergence de Docker rend la gestion des applications de conteneurs très simple. L'exécution d'un conteneur ne nécessite qu'une seule commande. Le téléchargement d'images depuis DockerHub, la création de divers environnements d'isolation, la création de conteneurs et d'environnements de communication réseau externes peuvent tous être réalisés par Docker. On peut dire que Docker peut gérer tout le cycle de vie du conteneur.
En résumé des conteneurs, nous pouvons résumer les plus grandes fonctionnalités des conteneurs comme un déploiement léger et complètement indépendant. Ces deux caractéristiques sont tout à fait cohérentes avec l'expansion élastique et illimitée et l'utilisation à la demande du cloud natif. De ce fait, les conteneurs sont devenus la pierre angulaire du cloud natif.
Bien que les conteneurs et les machines virtuelles soient tous deux des unités de calcul, passer des machines virtuelles aux conteneurs ne peut pas être considéré comme une simple amélioration des performances ou un changement d'architecture, mais comme un changement de philosophie applicative.
Par exemple, les bûcherons utilisaient des haches lorsqu'ils lisaient. Plus tard, tout le monde a estimé que l'utilisation de la hache était trop laborieuse, alors un expert a introduit un autre outil pour couper les arbres, la scie. Mais si un bûcheron prend une scie pour abattre un arbre, il constatera qu’il n’existe pas de hache facile à utiliser. Mais la vérité est qu’une hache et une scie sont deux concepts utilisés.
En parlant de la différence de concepts entre les conteneurs et les machines virtuelles, nous pouvons la ressentir davantage à travers le tableau ci-dessous.
Les applications typiques des conteneurs peuvent être divisées en deux catégories, l'une est celle des microservices et l'autre est celle du DevOps.
Les microservices signifient que différentes unités ou fonctions du système gèrent différents conteneurs. Le nombre de conteneurs pour chaque service peut être ajusté en fonction de sa propre charge. Par exemple, un grand système comprend des fonctions telles que la connexion des utilisateurs, l'affichage des produits et l'interaction des produits. Cependant, toutes les parties du système n'augmentent pas de manière linéaire en même temps. Certaines parties peuvent être plus occupées et certaines parties peuvent avoir une capacité excédentaire.
DevOps fait référence aux processus rationalisés de développement, de test et de production. En raison de la nature « autonome » du conteneur, lorsqu'il est utilisé comme élément de circulation standard, il peut rendre complètement cohérent l'empaquetage d'applications de l'environnement de développement, de l'environnement de test et de l'environnement de production, ce qui réduit les accidents causés par la configuration des dépendances des applications. erreurs, etc., rendant ainsi l'ensemble du pipeline de développement, de tests et de production plus efficace.
Pod est une unité d'exécution multi-conteneurs combinée et une unité de base dans Kubernetes. Vous pouvez le considérer comme une extension ou un conteneur amélioré d'un conteneur. Pod comprend un conteneur principal et plusieurs conteneurs auxiliaires, qui remplissent ensemble une fonction spécifique. Lorsque plusieurs processus (les conteneurs sont également un processus isolé) sont regroupés dans un espace de noms, un pod est formé. Le packaging applicatif des différents processus dans le Pod est toujours indépendant (chaque conteneur aura sa propre image).
L'importance de Pod est qu'il peut maintenir la relation étroite entre le conteneur principal et le conteneur auxiliaire tout en conservant l'indépendance du conteneur principal. Puisque le conteneur principal et le conteneur auxiliaire ont le même cycle de vie et peuvent être créés et détruits en même temps, les placer dans un Pod peut rendre leur interaction plus efficace.
D'un autre côté, le conteneur principal doit accomplir certaines tâches principales, et d'autres tâches peuvent être courantes et peuvent être emballées séparément et exécutées par le conteneur auxiliaire.
Je recommande fortement à tout le monde d'aller sur un site Web appelé Katacoda. Il propose un grand nombre d'expériences en ligne gratuites, y compris des projets pratiques tels que Docker et Docker Image, et il est désormais entièrement gratuit. Autant y aller et se salir les mains.
Lorsqu'une plate-forme de conteneurs exécute plusieurs applications locataires, il est facile que des « attaques latérales » se produisent, c'est-à-dire que le processus utilise les vulnérabilités du système pour élever ses privilèges, par exemple en mettant à niveau ses propres privilèges en tant qu'administrateur, obtenant ainsi accès au système en cours d'exécution. autorisations de fonctionnement d’autres processus ou conteneurs. Actuellement, de telles vulnérabilités conduisent généralement à une utilisation malveillante des ressources informatiques à des fins de « minage ».
Pour résoudre ce problème, il existe actuellement deux solutions, l'une consiste à "restreindre les appels système" et l'autre à "noyau indépendant".
Restreindre les appels système fait référence à la réduction des capacités de l'application en limitant les appels système de l'application, évitant ainsi de nuire aux autres applications. Actuellement, Givsor de Google et Nabla d'IBM adoptent tous deux cette approche. Comme le montre la figure ci-dessous, une application accède à l'origine à tous les appels système, mais en mode Nabla, l'application accède uniquement aux appels système nécessaires et les autres appels sont bloqués.
Mais l'inconvénient de cette méthode est qu'elle nécessite que vous accordiez à l'application "juste les bonnes" autorisations au début. Si vous ne donnez pas suffisamment d'autorisations par accident, l'application peut planter.
Le noyau indépendant fait référence à la solution de machine virtuelle. Il fait référence à l'ajout d'un nouveau noyau au conteneur. Ce noyau est léger et comprend deux méthodes d'implémentation : "microkernel" et unikernel. Les Unikernels et les applications sont compilés ensemble et peuvent être appelés directement via des fonctions sans appels système.
L'avantage de cette solution est que le conteneur ne traite essentiellement que son propre noyau, tandis que le noyau s'occupe de l'hôte. L'interaction entre le noyau et l'hôte ne nécessite que quelques instructions communes et n'implique pas d'appels directs au système. instructions. Actuellement, les conteneurs natifs Kata Container et JD.com Cloud utilisent cette méthode.
L'avantage de cette approche est qu'en tant que système d'exploitation minimal, le micro-noyau peut satisfaire tous les appels système tout en supprimant certaines parties inutiles du fonctionnement du système ; son temps de démarrage du système est très court, atteignant le deuxième niveau, et en même temps Le la surcharge est inférieure à celle d’une machine virtuelle.
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!