Réseau Docker - Découvrez comment les conteneurs communiquent entre eux



Apprenez tout sur les capacités de mise en réseau de Docker avec une compréhension du modèle de réseau de conteneurs et de sa mise en œuvre avec un Hands-On.

Dans le monde d’aujourd’hui, les entreprises sont devenues passionnées par la conteneurisation, ce qui nécessite de solides compétences en réseau pour configurer correctement une architecture de conteneur, ce qui introduit le concept de réseau Docker.

Dans ce blog sur le réseau Docker, vous passerez par les rubriques suivantes:





Qu'est-ce que Docker?

Pour comprendre Docker, vous devez connaître l'historique de la façon dont les applications ont été déployées avant, puis la façon dont les applications sont déployées à l'aide de conteneurs maintenant.

Déploiement d



Comme vous pouvez le voir dans le diagramme ci-dessus, l'ancienne méthode avait des applications sur l'hôte.Ainsi, n nombre d'applications partagent les bibliothèques présentes dans ce système d'exploitation.Mais, avec la conteneurisation, le système d’exploitation aura un noyau qui est la seule chose qui sera commune à toutes les applications.Ainsi, les applications ne peuvent pas accéder aux bibliothèques les unes des autres.

Donc, Docker en termes simples est une plate-forme ouverte pour le développement, l'expédition et l'exécution d'applications, permettant à l'utilisateur de séparer les applications des infrastructures à l'aide de conteneurs pour livrer des logiciels rapidement.

Alors, comment ces conteneurs communiquent-ils entre eux dans diverses situations?



Eh bien, cela passe par Docker Networking.

Réseau Docker

Avant de plonger dans Docker Networking, laissez-moi vous montrer le flux de travail de Docker.

Comme vous pouvez le voir dans le diagramme ci-dessus. Un développeur écrit un code qui stipule les exigences de l'application ou les dépendances dans un fichier Docker facile à écrire et ce fichier Docker produit des images Docker. Ainsi, toutes les dépendances requises pour une application particulière sont présentes dans cette image.

Désormais, les conteneurs Docker ne sont rien d'autre que l'instance d'exécution de Docker Image. Ces images sont téléchargées sur le Docker Hub (référentiel Git pour Docker Images) qui contient des référentiels publics / privés.

Ainsi, à partir de référentiels publics, vous pouvez également extraire votre image et vous pouvez télécharger vos propres images sur le Docker Hub. Ensuite, à partir de Docker Hub, diverses équipes telles que les équipes d'assurance qualité ou de production vont extraire cette image et préparer leurs propres conteneurs. Ces conteneurs individuels communiquent entre eux via un réseau pour effectuer les actions requises, et ce n'est rien d'autre que Docker Networking.

Ainsi, vous pouvez définir Docker Networking comme un passage de communication par lequel tous les conteneurs isolés communiquent entre eux dans diverses situations pour effectuer les actions requises.

Quels sont selon vous les objectifs de Docker Networking?

Objectifs de la mise en réseau Docker

La flexibilité - Docker offre de la flexibilité en permettant à n'importe quel nombre d'applications sur diverses plates-formes de communiquer entre elles.

conversion de la chaîne en date en java

Multiplateforme - Docker peut être facilement utilisé en multiplate-forme qui fonctionne sur divers serveurs à l'aide de Docker Swarm Clusters.

Évolutivité - Docker est un réseau entièrement distribué, qui permet aux applications de croître et d'évoluer individuellement tout en garantissant les performances.

Décentralisé - Docker utilise un réseau décentralisé, ce qui permet de diffuser les applications et de les rendre hautement disponibles. Dans le cas où un conteneur ou un hôte est soudainement absent de votre pool de ressources, vous pouvez soit afficher une ressource supplémentaire, soit passer à des services qui sont toujours disponibles.

Convivial - Docker facilite l'automatisation du déploiement des services, ce qui les rend faciles à utiliser dans la vie de tous les jours.

Soutien - Docker propose des supports prêts à l'emploi. Ainsi, la possibilité d'utiliser Docker Enterprise Edition et d'obtenir toutes les fonctionnalités de manière très simple et directe rend la plate-forme Docker très facile à utiliser.

Pour activer les objectifs ci-dessus, vous avez besoin de quelque chose appelé le modèle de réseau de conteneurs.

Vous souhaitez explorer différentes étapes de DevOps?

Modèle de réseau de conteneurs (CNM)

Avant de vous dire ce qu'est exactement un modèle de réseau de conteneurs, laissez-moi vous présenter Libnetwork qui est nécessaire avant de comprendre CNM.

Libnetwork est une bibliothèque Docker open source qui implémente tous les concepts clés qui composent le CNM.

Donc, Modèle de réseau de conteneurs (CNM) standardise les étapes requises pour fournir la mise en réseau des conteneurs à l'aide de plusieurs pilotes réseau. CNM nécessite un magasin de valeurs-clés distribué comme la console pour stocker la configuration réseau.

Le CNM a des interfaces pour les plugins IPAM et les plugins réseau.

Les API de plug-in IPAM sont utilisées pour créer / supprimer des pools d'adresses et allouer / désallouer des adresses IP de conteneurs, tandis que les API de plug-ins réseau sont utilisées pour créer / supprimer des réseaux et ajouter / supprimer des conteneurs de réseaux.

Un CNM repose principalement sur 5 objets: contrôleur de réseau, pilote, réseau, point de terminaison et bac à sable.

Objets de modèle de réseau de conteneurs

Contrôleur réseau: Fournit le point d'entrée dans Libnetwork qui expose des API simples pour Docker Engine pour allouer et gérer les réseaux. Puisque Libnetwork prend en charge plusieurs pilotes intégrés et distants, le contrôleur de réseau permet aux utilisateurs de connecter un pilote particulier à un réseau donné.

Chauffeur: Possède le réseau et est responsable de la gestion du réseau en faisant participer plusieurs pilotes pour répondre à divers cas d'utilisation et scénarios de déploiement.

Réseau: Fournit la connectivité entre un groupe de points de terminaison qui appartiennent au même réseau et isolent du reste. Ainsi, chaque fois qu'un réseau est créé ou mis à jour, le pilote correspondant sera informé de l'événement.

Point final: Fournit la connectivité pour les services exposés par un conteneur dans un réseau avec d'autres services fournis par d'autres conteneurs du réseau. Un point de terminaison représente un service et pas nécessairement un conteneur particulier, Endpoint a également une portée globale au sein d'un cluster.

Bac à sable: Créé lorsque les utilisateurs demandent à créer un point de terminaison sur un réseau. Un bac à sable peut avoir plusieurs points de terminaison attachés à différents réseaux représentant la configuration réseau du conteneur, comme l’adresse IP, l’adresse MAC, les routes, le DNS.

Voilà donc les 5 principaux objets du CNM.

Maintenant, laissez-moi vous dire les différents pilotes réseau impliqués dans la mise en réseau Docker.

Vous voulez faire passer l'apprentissage DevOps à un niveau supérieur?

Pilotes réseau

Il existe principalement 5 pilotes réseau: Bridge, Host, None, Overlay, Macvlan

Pont: Le réseau de pont est un réseau interne privé par défaut créé par docker sur l'hôte. Ainsi, tous les conteneurs reçoivent une adresse IP interne et ces conteneurs peuvent accéder les uns aux autres, en utilisant cette adresse IP interne. Les réseaux Bridge sont généralement utilisés lorsque vos applications s'exécutent dans des conteneurs autonomes qui doivent communiquer.

Hôte : Ce pilote supprime l'isolation du réseau entre l'hôte docker et les conteneurs docker pour utiliser directement le réseau de l'hôte. Donc, avec cela, vous ne pourrez pas exécuter plusieurs conteneurs Web sur le même hôte, sur le même port car le port est désormais commun à tous les conteneurs du réseau hôte.

Aucun : Dans ce type de réseau, les conteneurs ne sont attachés à aucun réseau et n'ont aucun accès au réseau externe ou à d'autres conteneurs. Donc, ce réseau est utilisé lorsquevous souhaitez désactiver complètement la pile réseau sur un conteneur et,créer uniquement un périphérique de bouclage.

Recouvrir : Crée un réseau privé interne qui s'étend sur tous les nœuds participant au cluster swarm. Ainsi, les réseaux Overlay facilitent la communication entre un service Swarm et un conteneur autonome, ou entre deux conteneurs autonomes sur différents Daemons Docker.

Macvlan: Vous permet d'attribuer une adresse MAC à un conteneur, en le faisant apparaître comme un périphérique physique sur votre réseau. Ensuite, le démon Docker achemine le trafic vers les conteneurs par leurs adresses MAC. Le pilote Macvlan est le meilleur choix lorsque vous êtes censé être directement connecté au réseau physique, plutôt que d'être acheminé via la pile réseau de l'hôte Docker.

D'accord, c'était donc toute la théorie requise pour comprendre Docker Networking. Maintenant, permettez-moi de passer à autre chose et de vous montrer pratiquement comment les réseaux sont créés et les conteneurs communiquent entre eux.

Pratique

Donc, en supposant que vous avez tous installé Docker sur vos systèmes, j'ai un scénario à présenter.

Supposons que vous souhaitiez stocker le nom et l'ID des cours, pour lesquels vous aurez besoin d'une application Web. Fondamentalement, vous avez besoin d'un conteneur pour l'application Web et vous avez besoin d'un autre conteneur en tant que MySQL pour le backend, ce conteneur MySQL doit être lié au conteneur d'application Web.

Que diriez-vous d'exécuter pratiquement l'exemple ci-dessus.

régression logistique dans l'exemple de python

Étapes impliquées:

  • Initialisez Docker Swarm pour former un cluster Swarm.
  • Créer un réseau de superposition
  • Créer des services pour les applications Web et MySQL
  • Connectez les applications via le réseau

Commençons!

Étape 1: Initialisez Docker Swarm sur la machine.

docker swarm init --advertise-addr 192.168.56.101

L'indicateur –advertise-addr configure le nœud de gestionnaire pour publier son adresse sous la forme 192.168.56.101. Les autres nœuds de l'essaim doivent pouvoir accéder au gestionnaire à l'adresse IP.

Étape 2: Maintenant, si vous souhaitez joindre ce nœud de gestionnaire au nœud de travail, copiez le lien que vous obtenez lorsque vous initialisez swarm sur le nœud de travail.
Étape 3: Créez un réseau de superposition.

docker network create -d overlay myoverlaynetwork

Où myoverlay est le nom du réseau et -d permet à Docker Daemon de s'exécuter en arrière-plan.

Étape 4.1: Créez un service webapp1 et utilisez le réseau que vous avez créé pour déployer ce service sur le cluster swarm.

service docker create --name webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp

Où -pest pour la redirection de port,hsharest le nom du compte sur Docker Hub et webapp est le nom de l'application Web déjà présente sur Docker Hub.

Étape 4.2: Maintenant, vérifiez si le service est créé ou non.

service docker ls

Étape 5.1: Maintenant, créez un service MySQL et utilisez le réseau que vous avez créé pour déployer le service sur le cluster swarm.

service docker create --name mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5


Étape 5.2: Maintenant, vérifiez si le service est créé ou non.

service docker ls

Étape 6.1: Après cela, vérifiez quel conteneur est en cours d'exécution sur votre nœud maître et accédez au conteneur hshar / webapp.

docker ps

Étape 6.2: Ainsi, vous pouvez voir que seul le service webapp se trouve sur le nœud du gestionnaire. Alors, entrez dans le conteneur webapp.

docker exec -it id_conteneur bash nano var / www / html / index.php

La commande docker ps listera vos deux conteneurs avec leur ID de conteneur respectif. La deuxième commande activera ce conteneur en mode interactif.

qu'est-ce qu'une variable d'instance en java

Étape 7: Maintenant, changez le $ servername de localhost en mysql et $ password de «» »en« edureka », et changez également tous les détails de la base de données requis et enregistrez votre fichier index.php en utilisant le raccourci clavier Ctrl + x et après cela y pour enregistrer et appuyez sur entrée.

Étape 8: Maintenant, allez dans le conteneur mysql qui s'exécute sur un autre nœud.

docker exec -it container_id bash

Étape 9: Une fois que vous êtes entré dans le conteneur mysql, entrez les commandes ci-dessous pour utiliser la base de données dans MySQL.

Étape 9.1: Obtenez un accès pour utiliser le conteneur mysql.

mysql -u racine -pedureka

Où -u représente l'utilisateur et -p est le mot de passe de votre machine.

Étape 9.2: Créez une base de données dans mysql qui sera utilisée pour obtenir les données de webapp1.

CRÉER UNE BASE DE DONNÉES HandsOn

Étape 9.3: Utilisez la base de données créée.

UTILISER HandsOn

Étape 9.4: Créez une table dans cette base de données qui sera utilisée pour obtenir les données de webapp1.

CREATE TABLE détails_cours (nom_cours VARCHAR (10), id_cours VARCHAR (11))

Étape 9.5: Maintenant, quittez également MySQL et le conteneur en utilisant la commande sortie .

Étape 10: Accédez à votre navigateur et saisissez l'adresse sous la forme localhost: 8001 / index.php . Cela ouvrira votre application Web. Maintenant, entrez les détails des cours et cliquez sur Soumettre la requête .

Étape 11: Une fois que vous avez cliqué sur Soumettre la requête, accédez au nœud dans lequel votre service MySQL s'exécute, puis entrez dans le conteneur.

docker exec -it container_id bash mysql -u root -pedureka UTILISER HandsOn SHOW tables select * from course_details

Cela vous montrera la sortie de tous les cours, dont vous avez rempli les détails.

Ici, je termine mon blog Docker Networking. J'espère que vous avez apprécié ce post. Tu peux vérifier autres blogs dans la série aussi, qui traitent des bases de Docker.

Si vous avez trouvé ce blog Docker Container pertinent, consultez le par Edureka, une entreprise de formation en ligne de confiance avec un réseau de plus de 450 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation à la certification Edureka DevOps aide les apprenants à acquérir une expertise dans divers processus et outils DevOps tels que Puppet, Jenkins, Docker, Nagios, Ansible et GIT pour automatiser plusieurs étapes dans SDLC.

Vous recherchez une certification en DevOps?

Vous avez une question pour moi? Veuillez le mentionner dans la section des commentaires et je vous répondrai.