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 networkTypes de pilotes réseau Docker
Pour lister tous vos réseaux, exécutez :
# docker network lsFaisons une brève introduction sur chacun d'eux.
- 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.
- 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.
- 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.
- 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.
- 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 ashEnsuite, 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.3De même, connectez-vous au conteneur C2 et essayez de pinguer le conteneur C1.
# docker attach c2# Ping –c 2 172.17.0.2Comme 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 bridgeLa 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_netOu,
# docker network create --driver bridge dhruv_netLes 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 ashEssayez 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.











