Recherche de site Web

Expliquer les concepts de réseau Docker


Réseautage Docker est essentiellement utilisé pour établir la communication entre les conteneurs Docker et le monde extérieur via la machine hôte, ou l'on peut dire que c'est un passage de communication à travers lequel tous les conteneurs isolés communiquent entre eux dans diverses situations pour effectuer les actions requises. Dans ce guide, nous expliquerons les concepts de base du réseautage Docker avec des exemples pratiques sur Ubuntu.

Si vous n'avez pas encore installé Docker, consultez le guide suivant.

  • Comment installer Docker sur le serveur Ubuntu 18.04 LTS

Bases de l'utilisation de Docker :

  • Commencer avec Docker

Expliquer les concepts de réseau Docker

Toutes les commandes listées ci-dessous sont testées avec les privilèges root sur Ubuntu.

Pour gérer les opérations réseau, comme créer un nouveau réseau, connecter un conteneur à un réseau, déconnecter un conteneur du réseau, lister les réseaux disponibles et supprimer des réseaux, etc., nous utilisons la commande suivante :

# docker network

Types de pilotes réseau Docker

Pour lister tous vos réseaux, exécutez :

# docker network ls

Faisons une brève introduction sur chacun d'eux.

  1. Réseau pont : Lorsque vous démarrez Docker, un réseau pont par défaut est créé automatiquement. Les conteneurs nouvellement démarrés s'y connecteront automatiquement. Vous pouvez également créer des réseaux pont personnalisés définis par l'utilisateur. Les réseaux pont définis par l'utilisateur sont supérieurs au réseau pont par défaut.
  2. Réseau hôte : Il supprime l'isolation réseau entre le conteneur et l'hôte Docker, et utilise directement le réseau de l'hôte. Si vous exécutez un conteneur qui se lie au port 80 et que vous utilisez le réseau hôte, l'application du conteneur est disponible sur le port 80 à l'adresse IP de l'hôte. Cela signifie que vous ne pourrez pas exécuter plusieurs conteneurs web sur le même hôte, sur le même port, car le port est maintenant commun à tous les conteneurs du réseau de l'hôte.
  3. Réseau None : 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 aux autres conteneurs. Ainsi, ce réseau est utilisé lorsque vous souhaitez désactiver complètement la pile réseau sur un conteneur.
  4. Réseau superposé : Crée un réseau privé interne qui s'étend sur tous les nœuds participant au cluster Swarm. Ainsi, les réseaux superposés facilitent la communication entre un service Docker Swarm et un conteneur autonome, ou entre deux conteneurs autonomes sur différents démons Docker.
  5. Réseau Macvlan : Certaines applications, en particulier les applications héritées ou les applications qui surveillent le trafic réseau, s'attendent à être directement connectées au réseau physique. Dans ce type de situation, vous pouvez utiliser le pilote réseau Macvlan pour attribuer une adresse MAC à chaque interface réseau virtuelle d'un conteneur, ce qui la fait apparaître comme une interface réseau physique directement connectée au réseau physique.

Permettez-moi de vous montrer des exercices pratiques pour connecter en pont et héberger des réseaux.

1. Réseau en pont

Je vais utiliser deux conteneurs Alpine pour expliquer ce type de réseau.

Maintenant, je vais exécuter deux conteneurs Alpine à savoir C1 et C2 en utilisant les commandes :

# docker run -it -d --name c1 alpine ash
# docker run -it -d --name c2 alpine ash

Ensuite, découvrons l'adresse IP de ces conteneurs en cours d'exécution. Pour ce faire, exécutez :

# docker exec -it c1 sh –c “ip a”
# docker exec -it c2 sh –c “ip a”

Comme vous pouvez le voir, l'adresse IP du conteneur C1 est 172.17.0.2 et l'adresse IP de C2 est 172.17.0.3.

Maintenant, allons-y et essayons de nous pinguer mutuellement pour nous assurer qu'ils peuvent communiquer.

Tout d'abord, connectez-vous au conteneur C1 en cours d'exécution et essayez de pinguer le conteneur C2 :

# docker attach c1
# Ping –c 2 172.17.0.3

De même, connectez-vous au conteneur C2 et essayez de pinguer le conteneur C1.

# docker attach c2
# Ping –c 2 172.17.0.2

Comme vous le voyez dans les captures d'écran ci-dessus, la communication se fait entre les conteneurs au sein du même réseau.

Nous pouvons également le vérifier en inspectant le réseau de ponts en utilisant la commande :

# docker network inspect bridge

La commande ci-dessus affichera toutes les informations sur le réseau, telles que le type de réseau, le sous-réseau, la passerelle, les noms des conteneurs et les adresses IP, etc.

1.1 Création d'un réseau pont défini par l'utilisateur

Comme je l'ai déjà dit, lorsque vous démarrez Docker, un réseau pont par défaut est créé automatiquement. Tous les conteneurs nouvellement démarrés s'y connecteront automatiquement. Cependant, vous pouvez également créer des réseaux pont personnalisés définis par l'utilisateur.

Pour créer un nouveau pilote réseau, il suffit d'exécuter :

# docker network create my_net

Ou,

# docker network create --driver bridge dhruv_net

Les deux commandes effectueront le même travail. Si vous ne spécifiez pas le nom du pilote, il sera créé dans le pilote réseau par défaut, c'est-à-dire bridge.

Sur des réseaux définis par l'utilisateur comme dhruv_net, les conteneurs peuvent non seulement communiquer par adresse IP, mais peuvent aussi résoudre un nom de conteneur en une adresse IP. Cette capacité est appelée découverte de service automatique.

Pour vérifier si les conteneurs peuvent communiquer entre eux, lançons trois conteneurs Alpine nommés A1, A2 et A3 sur le réseau dhruv_net que nous avons créé précédemment.

# docker run -it -d --name A1 --network dhruv_net alpine ash
# docker run -it -d --name A2 --network dhruv_net alpine ash
# docker run -it -d --name A3 --network dhruv_net alpine ash

Essayez maintenant de vous connecter à l'un des conteneurs et de pinguer les deux autres en utilisant le nom du conteneur.

D'après les captures d'écran ci-dessus, il est prouvé que les conteneurs peuvent communiquer entre eux.

2. Réseau hôte

Nous exécutons un conteneur qui se lie au port 80 en utilisant le réseau de l'hôte, l'application du conteneur est disponible sur le port 80 de l'adresse IP de l'hôte.

Le réseau hôte n'est nécessaire que lorsque vous exécutez des programmes avec un réseau très spécifique. L'application s'exécutant à l'intérieur du conteneur Docker semble fonctionner sur l'hôte lui-même, du point de vue du réseau. Cela permet au conteneur d'avoir un accès au réseau plus important que ce qu'il peut normalement obtenir.

Ici, nous avons utilisé la commande netstat -ntlp pour afficher le port d'écoute sur le serveur. Pour savoir quel service écoute sur un port particulier, ce guide.

Nous n'avons couvert que les bases des concepts de mise en réseau Docker. Pour plus de détails, je vous suggère de consulter le guide de mise en réseau Docker ci-joint.

  • Réseautage des conteneurs Docker

Lecture suggérée :

  • Expliquer les volumes Docker
  • Comment mettre automatiquement à jour les conteneurs Docker en cours d'exécution
  • ctop – Un outil de surveillance en ligne de commande pour les conteneurs Linux
  • Portainer – La façon la plus simple de gérer Docker
  • PiCluster – Une application simple de gestion de Docker basée sur le web
  • Dockly – Gérer les conteneurs Docker depuis le terminal

À propos de l'auteur :

Dhruv Tiwari est un ingénieur DevOps qui adore automatiser les choses, travailler avec Linux à grande échelle et rêve du jour où les systèmes seront suffisamment intelligents pour ne jamais avoir besoin de se connecter à une machine Linux. Voyage du CI/CD depuis le code source jusqu'au déploiement du code en production.