Docker Compose Bridge Networking

Docker Compose Bridge Networking
Docker Compose est un moyen facile de déployer des applications multi-continents. Il automatise une grande partie de la gestion de la réservation, du réseautage et de la gestion des ressources des applications dans un seul docker-compose soigné.fichier yml. Vous pouvez faire monter l'application en exécutant Docker-Compose et le remettre en arrière à l'aide de Docker-Compose.

Beaucoup est ajouté à notre environnement Docker, qui est négligé puis supprimé avec la dernière commande. L'un des objets les plus importants est un réseau de ponts. C'est sur quoi nous nous concentrerons. Plus précisément, le réseautage de ponts.

Docker Bridge Network

Docker a de nombreux pilotes liés au réseautage. Deux des plus importants sont le pilote de réseautage de ponts et superpose un. Ce dernier est utilisé pour le mode Swarm Docker, où les conteneurs qui coulent sur différents nœuds peuvent encore faire partie du sous-réseau abstrait unique. Le réseautage de ponts, cependant, est celui qui nous intéresse ici.

Pour créer un nouveau réseau Docker appelé My-Network et l'inspecter, exécutez:

$ Docker Network Create -d Bridge My Network
$ docker inspecter mon réseau

Vous verrez, entre autres, un masque de sous-réseau et une passerelle par défaut.


"Config": [

"Sous-réseau": "172.18.0.0/16 ",
"Gateway": "172.18.0.1"

Tout conteneur qui est connecté à ce réseau obtiendra une IP dans la plage de 172.18.0.2 à 172.18.255.254. Essayons de créer quelques conteneurs sur ce réseau:

$ docker run -Dit --name Container1 --Network My-Network Ubuntu: Dernier
$ docker run -Dit --name Container2 --Network My-Network Ubuntu: Dernier

Si vous exécutez maintenant, inspectez mon réseau, vous remarquerez que les conteneurs individuels avec leur nom propre et les adresses IP correspondantes apparaissent dans le champ des conteneurs de la sortie JSON.

$ docker inspecter mon réseau

"Conteneurs":
"8CE5CD67E6AED180B5D0B6B0FCD597175D6154C9208DAA9DE304AEC94757E99B":
"Nom": "conteneur1",
"EndPointId": "93d020d22172d6c98a0b88e78a7a01f6d1a3d44b983e7454fba7c1f1be5fae9d",
"Macaddress": "02: 42: AC: 12: 00: 02",
"IPv4Address": "172.18.0.2/16 ",
"Ipv6address": ""
,
"AF1434DF6F86D2DF96ACA1D7348DD6C815A4989EC07FB0F3CFEA95D4A38B4F74":
"Nom": "Container2",
"EndpointID": "3A5F57639C71685A10584FD392C20ABC5AE693684860BEF486404D26B332395A",
"Macaddress": "02: 42: AC: 12: 00: 03",
"IPv4Address": "172.18.0.3/16 ",
"Ipv6address": ""

Si vous créez un autre réseau My-Network2, il aura un masque de sous-réseau différent comme 172.19.0.0/16 et les conteneurs seront isolés des conteneurs sur d'autres réseaux. Ainsi, idéalement, vous voulez un réseau par application, donc chaque application est sécurisée et isolée les unes des autres.

Comment composer un réseau

Docker Compose comprend l'idée derrière l'exécution des services pour une application sur un réseau. Lorsque vous déploiez une application à l'aide d'un fichier Docker Compose, même lorsqu'il n'y a aucune mention de paramètres de réseautage spécifiques, Docker Compose créera un nouveau réseau de ponts et déploiera le conteneur sur ce réseau.

Si le docker-compose.YML est dans Directory My-App, le nom du répertoire sera utilisé pour nommer le réseau ainsi que les conteneurs montés sur. Par exemple, si je crée un répertoire:

$ mkdir my-app
$ cd my-app
$ vim docker-compose.YML

Et ajouter le contenu suivant au docker-compose.Fichier YML:

Version: '3'
prestations de service:
My-nginx:
Image: Nginx: Dernière

Remarquez, comment nous n'avons pas exposé de ports. Déployons cette application:

$ docker-compose up -d

Cela crée un nouveau réseau appelé my-app_default en utilisant le pilote de réseau de pont dont nous avons discuté auparavant.Vous pouvez répertorier tous les réseaux sur votre configuration personnelle à l'aide de Docker Network LS, puis choisir l'interface réseau qui correspond au nom de votre répertoire. Une fois que vous avez le nom du réseau, vous pouvez inspecter Docker pour voir tous les conteneurs qui font partie de ce réseau ainsi que leurs adresses IP individuelles et leur masque de sous-réseau.

Si nous créons un autre conteneur, en utilisant directement la CLI (ce n'est pas recommandé pour les cas d'utilisation du monde réel) sur ce réseau, nous pouvons réellement parler à notre service My-Nginx.

$ docker run -Dit --name contener4 --network my-app_default ubuntu: dernier
$ docker exec -it contener4 bash
root @ a32acdf15a97: / # curl http: // my-app_my-nginx_1

Cela imprimera un fichier html avec des extraits familiers comme «bienvenue à nginx» visible. Le serveur Web Nginx est accessible à partir du réseau sans que nous ayons à publier des ports! Plus important encore, vous n'avez même pas besoin de l'atteindre en utilisant sa propriété intellectuelle privée, vous pouvez simplement l'appeler par son nom d'hôte (c'est le nom de conteneur comme indiqué dans Docker PS).

Lorsque vous exécutez une base de données et en la connectant au frontend, vous n'aurez pas du tout à publier le port de base de données. Au lieu de cela, vous pouvez atteindre la DB à partir du serveur Web simplement en appelant son nom d'hôte prévisible. Même lorsque Docker Compose est exécuté ailleurs où et l'IP et le sous-réseau peuvent maintenant différer, les conteneurs pourront toujours se parler.

Bien sûr, pour publier un port dans le monde extérieur, nous écrivions quelque chose comme ce qui suit:

Version: '3'
prestations de service:
My-nginx:
Image: Nginx: Dernière
port:
- «8080: 80»

Maintenant, les gens peuvent accéder au serveur Web à partir du port 8080 à l'IP de votre hôte Docker. Cela peut être, par exemple, la propriété publique publique de votre VPS ou simplement localhost si vous exécutez Docker sur votre bureau. Encore une fois, je souligne que vous n'avez pas à exposer de ports pour votre conteneur de base de données, car le serveur Web peut lui parler directement et donc cela réduit le risque de bases de données exposées à Internet.

Lorsque vous réduisez votre application, en utilisant:

$ docker-compose

Ce réseau de pont personnalisé ainsi que tous les conteneurs éphémères qui ont été créés et attachés par-dessus, en utilisant le compose docker.Fichier YML, sera supprimé. Laisser votre environnement Docker dans un état propre.

Définir votre propre réseau

Compose vous permet de définir votre propre définition de réseau. Cela comprendrait des options de masque de sous-réseau, des adresses IPv6, entre autres. La façon dont cela est fait est que nous avons des réseaux de haut niveau, tout comme les services ou la version sont des clés de haut niveau. Cette clé n'a pas d'indépendance. Sous la clé de réseaux, nous pouvons désormais définir divers attributs du réseau, pour l'instant nous resterons simples et mentionnerons simplement qu'il devrait utiliser le pilote de pont.

Version: '3'
Réseaux:
mon réseau:
conducteur: pont

Maintenant, chaque conteneur peut se connecter à plusieurs réseaux, donc dans la section des services, nous mentionnons le nom de ce réseau personnalisé. La clé de réseaux s'attend ici à une liste de réseaux.

Version: '3'
prestations de service:
My-nginx:
Image: Nginx: Dernière
Réseaux:
- mon réseau
- un peu de réseau # C'est un autre réseau que vous pourriez avoir créé.

Enfin, l'ordre dans lequel le réseau est défini puis utilisé dans une définition de service est pertinent. Ainsi, le fichier YML entier ressemblera à ceci:

Version: '3'
prestations de service:
My-nginx:
Image: Nginx: Dernière
Réseaux:
- mon réseau
Réseaux:
mon réseau:
conducteur: pont

Plus d'informations

En écrivant vos propres définitions de réseau, vous voudrez peut-être vous référer à la documentation officielle. Pour un coup d'œil rapide aux réseaux de haut niveau, visitez ce lien et pour la clé de réseaux de niveau de service, voici la référence.

Vous pouvez également essayer de spécifier des sous-réseaux dans la définition de réseaux de niveau supérieur afin que les services puissent avoir une gamme prédéterminée d'adresses IP.