Cursus
La mise en réseau est un concept central des applications conteneurisées. Il permet une communication fluide entre tous les conteneurs, les systèmes hôtes et les services externes. Les fonctionnalités réseau intégrées de Docker sont indispensables pour isoler efficacement les services, sécuriser le flux de données et orchestrer des architectures de microservices évolutives.
L'un des outils les plus puissants dans ce contexte est la commande Docker network create, qui permet aux ingénieurs DevOps et aux développeurs de définir des réseaux personnalisés adaptés aux besoins de leurs applications.
C'est pourquoi je vais vous expliquer aujourd'hui, étape par étape, comment créer et gérer efficacement ces réseaux Docker.
Si vous découvrez Docker, veuillez consulter notre cursus sur la Conteneurisation et virtualisation avec Docker et Kubernetes afin d'acquérir une expérience pratique.
Qu'est-ce que le réseau Docker ?
La création d'applications modernes implique généralement l'utilisation de plusieurs services dans des conteneurs individuels et isolés. Le réseau Docker offre un moyen flexible et puissant de connecter ces conteneurs entre eux, ainsi qu'à des systèmes externes, via le modèle de réseau de votre choix, quelle que soit l'infrastructure sous-jacente.
Cette section vous fournira des connaissances de base sur le réseau Docker, qui est un composant clé de Docker, et vous expliquera comment évaluer la configuration réseau la mieux adaptée aux besoins de votre application. Cependant, avant de commencer, si vous êtes totalement novice en matière de Docker, je vous encourage vivement à consulter Introduction à Docker afin d'acquérir des bases solides avant de vous plonger dans le réseau Docker.
Pilotes réseau : la base du réseau Docker
Docker utilise des pilotes réseau pour définir comment les conteneurs se connectent et communiquent. Chaque pilote définit la manière dont il gère la mise en réseau des conteneurs. Par conséquent, les niveaux de performance, d'isolation et de complexité varient pour chacun des principaux pilotes réseau de Docker.
Présentation des principaux pilotes réseau Docker
Voici les principaux pilotes intégrés pris en charge par Docker :
- du pont: Pilote par défaut pour les conteneurs autonomes. Il crée un réseau interne isolé sur l'hôte, permettant aux conteneurs de communiquer entre eux à l'aide d'adresses IP ou de noms de conteneurs. Idéal pour le développement et les tests sur un seul hôte.
- animateur: Supprime l'isolement en partageant la pile réseau de l'hôte. Le conteneur utilise directement l'adresse IP et les ports de l'hôte. Utile pour les applications hautes performances ou pour la compatibilité avec les services au niveau hôte.
- Aucune: Désactive toutes les connexions réseau pour le conteneur. Seule une interface de bouclage est disponible. Idéal pour les conteneurs qui ne nécessitent pas de connectivité externe ou qui requièrent une isolation de sécurité stricte.
- s de superposition: Permet la communication entre des conteneurs sur différents hôtes Docker. Couramment utilisé dans Docker Swarm et les déploiements multi-hôtes. Il crée un réseau distribué qui abstrait l'infrastructure physique sous-jacente.
- Macvlan: Attribue une adresse MAC unique à chaque conteneur, ce qui lui permet d'apparaître comme un périphérique physique sur le réseau. Convient aux applications existantes qui nécessitent un accès direct au réseau physique.
- s IPvlan: Semblable à macvlan, mais achemine le trafic au niveau de la couche IP au lieu d'utiliser des adresses MAC. Offre de meilleures performances et un meilleur contrôle dans les environnements à haute densité.
Chaque pilote influe sur la manière dont les conteneurs interagissent entre eux, avec l'hôte et avec les réseaux externes.
Vous souhaitez savoir comment ces types de réseaux fonctionnent ensemble ? Notre cours Docker intermédiaire couvre le réseau Docker, les volumes et Compose de manière pratique et détaillée. Il est essentiel de comprendre ces différences pour concevoir des architectures sécurisées et performantes.
Quel type de réseau dois-je utiliser ?
Le choix du pilote réseau approprié dépend de l'architecture de votre application et de vos objectifs opérationnels :
- du pont: Recommandé pour la plupart des scénarios de développement local et les applications multi-conteneurs simples sur un seul hôte. Offre un équilibre entre isolation et facilité d'utilisation.
- animateur: Idéal lorsque les conteneurs doivent se connecter directement au réseau de l'hôte, par exemple lors de l'exposition de services sur des ports standard (par exemple, les ports 80 ou 443). Soyez vigilant en matière de sécurité et de conflits de ports.
- Aucune: Idéal pour les charges de travail en mode sandbox ou les tâches critiques pour la sécurité qui ne doivent pas avoir accès au réseau. Courant dans les flux de travail automatisés ou les tests.
- s de superposition: Indispensable dans les environnements en cluster tels que Docker Swarm ou Kubernetes, où les conteneurs s'étendent sur plusieurs hôtes. Permet la mise à l'échelle horizontale et la découverte des services.
- Macvlan: À privilégier lorsque les conteneurs doivent se comporter comme des périphériques physiques sur le réseau local. Utilisé dans des cas tels que le reniflage de réseau, l'intégration de systèmes hérités ou lors du contournement de la pile réseau de Docker.
- s IPvlan: Offre un contrôle granulaire et de meilleures performances que macvlan pour les environnements soumis à des exigences réseau strictes, tels que les systèmes financiers ou de télécommunications.
Tenez compte de facteurs tels que la topologie de l'hôte, les besoins en matière de sécurité et la stratégie d'évolutivité lorsque vous choisissez un pilote réseau.
Vous n'avez pas encore déterminé quel réseau convient le mieux à votre charge de travail ? Découvrez comment Docker se compare à Kubernetes dans des déploiements réels grâce à ce document. guide Kubernetes vs Docker.
Création de réseaux Docker personnalisés
Les réseaux Docker personnalisés vous permettent de contrôler la manière dont les conteneurs communiquent entre eux, ainsi qu'avec les systèmes externes, ce qui peut vous aider à mieux isoler les services, leur attribuer des adresses IP prévisibles ou concevoir votre architecture pour optimiser les performances ou la sécurité.
Cette section vous guidera à travers les fonctionnalités de base et avancées du processus de création de réseaux Docker personnalisés, y compris les commandes et les configurations IP personnalisées.
Structure de commande de base
Pour créer un réseau personnalisé, veuillez utiliser la commandedocker network create. Cela vous permet de définir le pilote réseau, le sous-réseau et d'autres options pour un meilleur contrôle de la communication entre les conteneurs.
Voici un exemple simple utilisant le pont par défaut bridge :
$ docker network create demo-network -d bridge
Cette commande crée un réseau pont nommé demo-network. Docker renvoie un identifiant réseau unique à titre de confirmation. À ce stade, le réseau existe, mais ne connecte encore aucun conteneur.
Vous pouvez afficher les réseaux existants à l'aide de :
$ docker network ls
Pour connecter un conteneur à votre nouveau réseau, veuillez utiliser l'indicateur --network :
$ docker run -it --rm --name container1 --network demo-network busybox:latest
Pour ajouter un conteneur existant à un réseau :
$ docker network connect demo-network container2
Et pour le supprimer :
$ docker network disconnect demo-network container2
Enfin, lorsque le réseau n'est plus nécessaire, vous pouvez le supprimer :
$ docker network rm demo-network
Pour supprimer tous les réseaux inutilisés :
$ docker network prune
Gestion avancée des adresses IP
Lorsque vous travaillez avec des systèmes plus importants ou des politiques réseau spécifiques, Docker vous permet de gérer manuellement les plages d'adresses IP au sein de réseaux personnalisés.
Vous pouvez définir un sous-réseau et une passerelle à l'aide des indicateurs --subnet et --gateway:
$ docker network create \
--driver bridge \
--subnet 192.168.100.0/24 \
--gateway 192.168.100.1 \
custom-network
Pour un contrôle accru, veuillez utiliser :
--ip-range: Attribuez un pool d'adresses IP que les conteneurs peuvent utiliser de manière dynamique, distinct de la plage de sous-réseaux complète.--aux-address: Réservez des adresses IP spécifiques au sein du sous-réseau pour les systèmes externes ou à des fins de documentation.
Par exemple :
$ docker network create \
--driver bridge \
--subnet 192.168.200.0/24 \
--ip-range 192.168.200.128/25 \
--aux-address reserved=192.168.200.254 \
advanced-network
Cette configuration :
- Limite les adresses IP dynamiques des conteneurs à la moitié supérieure du sous-réseau.
- Empêche les conflits avec une adresse IP réservée.
- Garantit un comportement réseau cohérent dans des environnements complexes.
Si vous avez besoin d'exemples plus détaillés, vous pouvez explorer des stratégies de configuration avancées dans 10 idées de projets Docker : , du niveau débutant au niveau avancé.
Réseau en mode essaim
Le mode Docker Swarm permet le déploiement coordonné de services sur un cluster d'hôtes Docker. Le réseautage est un élément essentiel de cette orchestration, car il garantit que les services exécutés sur différents nœuds peuvent communiquer entre eux de manière transparente et sécurisée.
Architectures réseau sensibles aux essaims
Docker Swarm est la solution de clustering native de Docker qui transforme un pool d'hôtes Docker en un seul moteur virtuel. Il vous permet de déployer et de gérer des conteneurs en tant que services distribués. L'une de ses principales forces réside dans la mise en réseau multi-hôtes, qui permet à des services situés sur différentes machines de communiquer comme s'ils se trouvaient sur le même hôte.
Le réseau en essaim prend en charge deux principaux types de trafic :
- Contrôle du trafic du plan de contrôle – communication de gestion chiffrée entre les nœuds Docker.
- Trafic du plan de données – communication entre conteneurs et accès aux services externes.
Swarm utilise des réseaux superposés pour prendre en charge la communication entre les nœuds et un maillage de routage pour équilibrer la charge du trafic externe entre les répliques de services.
Création de réseaux en essaim
Afin de faciliter la découverte des services et de sécuriser les communications multi-hôtes, Docker Swarm utilise des réseaux superposés avec une portée de swarm. Ils peuvent être créés manuellement ou automatiquement lors du lancement des services.
Voici comment créer un réseau de superposition à portée swarm :
$ docker network create \
--driver overlay \
--scope swarm \
my-overlay
Ce réseau n'est pas limité à un seul hôte ; tout nœud participant à l'essaim peut y connecter des conteneurs. Vous pouvez l'inspecter à l'aide de :
$ docker network inspect my-overlay
Personnalisation des réseaux de superposition
Les réseaux superposés prennent en charge des configurations avancées, telles que :
$ docker network create \
--driver overlay \
--subnet 10.0.9.0/24 \
--gateway 10.0.9.99 \
--opt encrypted \
my-secure-overlay
--subnetet--gatewaydéfinissent la topologie du réseau.--opt encryptedActive le chiffrement IPSEC pour le trafic des conteneurs.--scope swarmest automatiquement appliqué avec le pilote de superposition en mode essaim.
Comprendre les indicateurs --scope et --attachable
--scope swarm: Indique que le réseau est disponible sur tous les nœuds du swarm. Seuls les services en essaim (et non les conteneurs autonomes) peuvent utiliser ce réseau, sauf si l'option «--attachable» est spécifiée.--attachable: Permet aux conteneurs autonomes de rejoindre un réseau à portée swarm. Utile pour le débogage ou l'accès temporaire à un conteneur.
Par exemple :
$ docker network create \
--driver overlay \
--attachable \
my-dev-overlay
Cela vous permet de connecter des conteneurs classiques à un réseau en essaim, en plus des services.
Configuration et validation du réseau
Il est nécessaire de vérifier que vos réseaux Docker sont correctement configurés afin d'assurer une communication fluide entre les conteneurs, de garantir la sécurité requise et d'offrir des services performants. Docker propose plusieurs outils et commandes pour examiner, dépanner et valider vos configurations réseau.
Vérification de la configuration du réseau
Pour examiner les détails de configuration d'un réseau Docker, veuillez utiliser la commande docker network inspect. Vous recevrez une sortie JSON détaillée comprenant :
- Pilote réseau (
bridge,overlay, etc.) - Configuration du sous-réseau et de la passerelle
- Portée (
local,swarm) - Conteneurs connectés et leurs adresses IP
- Accès interne ou externe
- Options spécifiques au pilote (par exemple, identifiants VXLAN pour les réseaux superposés)
Par exemple, vous pourriez procéder comme suit :
$ docker network inspect my-network
Recherchez des champs clés tels que :
- "Driver": Vérifie que le type de réseau souhaité a bien été créé.
- « IPAM » : Confirme les paramètres de gestion des adresses IP, y compris les sous-réseaux ou les passerelles personnalisés.
- « Conteneurs » : Affiche les conteneurs connectés et les adresses IP qui leur sont attribuées.
- "Options": Affiche les configurations avancées telles que le chiffrement (chiffré : vrai) ou la taille MTU.
Techniques de validation
Pour vérifier que votre réseau fonctionne correctement :
- Veuillez d'abord vérifier la configuration IPAM. Veuillez consulter la section « IPAM » dans la sortie d'inspection du réseau Docker. Veuillez vous assurer que le sous-réseau et la passerelle correspondent à votre configuration souhaitée. Des sous-réseaux mal configurés peuvent entraîner des problèmes de connectivité ou des conflits d'adresses IP.
- Ensuite, vous devez vérifier les identifiants VXLAN (superposition uniquement). Les réseaux de superposition utilisent VXLAN pour encapsuler le trafic des conteneurs sur plusieurs hôtes. Veuillez vérifier la section « Options » pour des clés telles que :
"com.docker.network.driver.overlay.vxlanid_list": "4097"
Cela confirme que le tunnel VXLAN est actif et correctement configuré. Si ces informations sont manquantes ou incorrectes, les services peuvent ne pas être accessibles entre les nœuds.
- Enfin, veuillez vérifier la connectivité entre les conteneurs. À partir d'un conteneur, essayez d'envoyer une commande ping ou d'accéder à un autre conteneur à l'aide de son nom ou de son adresse IP. Cela confirme que la résolution DNS et le routage interne fonctionnent correctement :
$ docker exec -it container1 ping container2
Vérifier le comportement DNS
Les conteneurs connectés à des réseaux définis par l'utilisateur utilisent le serveur DNS intégré de Docker. Pour confirmer, veuillez vérifier le fichier /etc/resolv.conf à l'intérieur du conteneur et tester la résolution des noms de service.
Vérifier le routage de la passerelle
Pour les conteneurs sur plusieurs réseaux, Docker sélectionne la passerelle par défaut en fonction de la priorité gw la plus élevée. Pour garantir un routage correct, veuillez attribuer des priorités explicites lors de la création des conteneurs :
$ docker run --network name=public,gw-priority=1 --network private mycontainer
Veuillez utiliser les journaux et les outils de diagnostic.
Veuillez surveiller les journaux des conteneurs afin de détecter les erreurs de connectivité et utiliser des outils tels que curl, dig et ip a à l'intérieur des conteneurs pour un débogage de bas niveau.
En résumé, la validation de vos configurations réseau Docker contribue à garantir une communication fluide entre les conteneurs et à minimiser les défaillances inattendues dans les applications multiservices.
Ceci nous amène à la section suivante.
Optimisation de la sécurité et des performances
Le véritable réseau de conteneurs ne se limite pas à la mise en place de méthodes de communication. Dans de nombreux cas, il assure l'isolation nécessaire tout en garantissant des performances optimales. Lorsque vous sécurisez votre architecture et fournissez un service, la segmentation et le débit peuvent vous aider à atteindre vos objectifs.
Stratégies de segmentation du réseau
La segmentation du réseau est une pratique fondamentale et une méthode de sécurité pour les applications conteneurisées. En affectant les conteneurs à des réseaux Docker distincts, vous pouvez séparer les préoccupations transversales telles que la segmentation des services avec un frontend, un backend et une base de données. Cela peut permettre une atténuation proactive des risques liés à l'exposition et aux attaques potentielles.
Vous pouvez utiliser des réseaux définis par l'utilisateur pour vous aider à gérer les limites de communication. Les conteneurs appartenant à différents réseaux ne peuvent pas communiquer entre eux, sauf si vous les connectez explicitement. Par exemple, si vous placez votre conteneur de base de données sur un réseau interne uniquement, vos services publics ne pourront pas y accéder directement.
Règles et contrôles de pare-feu intégrés
Par défaut, Docker implémente des règles iptables pour restreindre les points de terminaison de communication entre les conteneurs et le monde extérieur.
Voici quelques moyens d'étendre cette segmentation :
- Désactiver la communication entre conteneurs sur le réseau de pont par défaut :
{
"icc": false
}
- Ajoutez ceci à l'
daemon.jsondu démon Docker pour empêcher les conteneurs de communiquer, sauf s'ils se trouvent sur le même réseau défini par l'utilisateur. - Limitation des capacités et des privilèges à l'aide d'indicateurs tels que «
--cap-drop», «--read-only» et «--no-new-privileges». - Utilisation de réseaux superposés en mode Swarm pour des communications de service cryptées et limitées à un périmètre défini entre plusieurs hôtes.
Techniques d'optimisation des performances
Il existe plusieurs méthodes pour améliorer les performances grâce à l'optimisation avec Docker.
Amélioration du débit du réseau
Le choix du pilote réseau approprié a un impact direct sur les performances. Par exemple :
- Utilisez le pilote hôte lorsque des communications à faible latence et haut débit sont essentielles et que l'isolation du réseau n'est pas une priorité.
- Il est recommandé d'utiliser un pont pour les environnements locaux et isolés.
- Déployez macvlan lorsque les conteneurs doivent se comporter comme des périphériques physiques sur votre réseau.
Évitez de surcharger le pont par défaut. pont et créez des réseaux distincts pour les services lourds ou les regroupements logiques.
Profilage des performances avec iperf3 et des métriques
Pour mesurer les performances du réseau, veuillez utiliser des outils de profilage tels que iperf3:
# Start server in container1
docker run -it --rm --name server --network my-net networkstatic/iperf3 -s
# Run client in container2
docker run -it --rm --network my-net networkstatic/iperf3 -c server
Vous pouvez également surveiller les statistiques réseau à l'aide de :
docker stats– CPU, mémoire et E/S réseau en temps réel.- Prometheus + cAdvisor – Pour les mesures chronologiques et la surveillance à long terme.
- Scripts ou agents personnalisés exportant des métriques d'
/proc/net/devà partir de conteneurs.
Un profilage régulier permet de détecter rapidement les goulots d'étranglement et d'orienter les décisions relatives au placement des conteneurs, à la sélection des pilotes ou à la mise à niveau du réseau hôte.
Dépannage des problèmes de réseau
Même en suivant les meilleures pratiques, des problèmes réseau peuvent survenir. Il est essentiel de les diagnostiquer et de les résoudre rapidement afin de garantir la disponibilité du service. Cette section fournit des outils et des techniques permettant d'identifier et de résoudre les problèmes réseau courants liés à Docker.
Diagnostic des problèmes réseau
Un conteneur minimal peut ne pas disposer d'outils tels que ping, dig ou netstat, ce qui peut compliquer le dépannage. Au lieu de modifier le conteneur, veuillez en lancer un nouveau partageant son espace de noms réseau :
docker run -it --network container:my-container alpine
Veuillez ensuite installer les outils réseau :
apk add --no-cache iproute2 bind-tools net-tools
Vous pouvez également utiliser nicolaka/netshoot, une image spécialement conçue et dotée d'outils de diagnostic :
docker run -it --rm --network container:my-container nicolaka/netshoot
Des outils tels que ip, nslookup, netstat et traceroute vous aideront à identifier les problèmes de routage ou de DNS.
Résolution des problèmes de connectivité
Quelques causes courantes et leurs solutions :
- Erreurs de résolution DNS: Veuillez vous assurer que le conteneur se trouve sur un réseau défini par l'utilisateur afin de bénéficier du DNS intégré de Docker. Veuillez vérifier le fichier /etc/resolv.conf et utiliser dig ou nslookup pour tester la résolution des noms.
- Incompatibilité MTU: Les conteneurs répartis sur différents réseaux ou hôtes peuvent subir des pertes de paquets en raison d'incompatibilités entre les MTU. Réduisez la taille MTU dans les réseaux superposés si le tunneling est utilisé :
docker network create --driver overlay --opt com.docker.network.driver.mtu=1200 my-overlay
Sous-réseaux en conflit
Évitez de faire se chevaucher les sous-réseaux entre les réseaux Docker ou avec les réseaux physiques de votre hôte. Veuillez utiliser l'--subnet pour définir des plages qui ne sont pas en conflit.
Ports bloqués par le pare-feu de l'hôte
Veuillez vous assurer que les ports Docker requis sont ouverts :
- 2377 (Gestion des essaims)
- 7946 TCP/UDP (détection de conteneurs)
- 4789 UDP (données superposées)
Un dépannage efficace combine des diagnostics et une solide compréhension de la manière dont les conteneurs interagissent avec leurs réseaux. Avec les outils et l'approche adéquats, la plupart des problèmes peuvent être isolés et résolus en quelques minutes.
Conclusions
Le réseau Docker est un composant fondamental des architectures conteneurisées, qui permet une communication sécurisée, efficace et évolutive entre les services, qu'ils s'exécutent sur un seul hôte ou sur un cluster distribué.
Grâce à la prise en charge intégrée de divers pilotes réseau, à la gestion personnalisable des adresses IP et aux réseaux de superposition natifs Swarm, Docker permet aux développeurs et aux équipes DevOps d'isoler les charges de travail, de contrôler le flux de données et d'optimiser les performances dans des environnements complexes.
Il ne s'agit pas d'une solution universelle, mais lorsqu'elle est utilisée à bon escient, elle offre des fonctionnalités robustes pour créer des microservices modernes, des pipelines d'automatisation et des systèmes distribués sécurisés.
Souhaitez-vous continuer à perfectionner vos compétences en matière de Docker et de conteneurisation ?
Voici quelques ressources fortement recommandées pour poursuivre votre apprentissage :
- Introduction à Docker: Commencez par acquérir les bases de la gestion des conteneurs et des images.
- Docker intermédiaire: Approfondissez vos connaissances en matière de mise en réseau, de volumes et d'orchestration multi-conteneurs avec Docker Compose.
- Introduction à Kubernetes: Découvrez comment déployer et gérer des conteneurs à grande échelle avec Kubernetes.
- Docker Compose et Kubernetes : Comparaison détaillée: Comprenez les différences et déterminez quel outil d'orchestration correspond le mieux à vos besoins.
- 10 idées de projets Docker : De débutant à avancé: Mettez vos compétences en pratique grâce à des projets inspirés de la réalité.
FAQ sur la création de réseaux Docker
À quoi sert la commande Docker network create ?
Il est utilisé pour définir et configurer des réseaux Docker personnalisés, permettant aux conteneurs de communiquer de manière sécurisée et efficace.
Quels sont les principaux types de pilotes réseau Docker ?
Les principaux pilotes incluent bridge, host, none, overlay, macvlan et ipvlan, chacun offrant différents niveaux d'isolation et de connectivité.
Quand dois-je utiliser un réseau overlay dans Docker ?
Les réseaux superposés sont particulièrement adaptés à la communication multi-hôtes, notamment dans les environnements Docker Swarm ou Kubernetes.
Comment puis-je vérifier si un réseau Docker est correctement configuré ?
Veuillez utiliser Docker Network Inspect, vérifier les paramètres IPAM et VXLAN, puis tester la connectivité des conteneurs à l'aide de la commande ping ou d'outils DNS.
Quels outils permettent de diagnostiquer les problèmes de réseau Docker ?
Des outils tels que nicolaka/netshoot, dig, nslookup, iperf3 et les journaux de conteneurs sont utiles pour déboguer des problèmes courants tels que les échecs DNS ou les incompatibilités MTU.
Josep est data scientist et chef de projet à l'Office du tourisme de Catalogne, où il utilise les données pour améliorer l'expérience des touristes en Catalogne. Son expertise comprend la gestion du stockage et du traitement des données, associée à des analyses avancées et à la communication efficace des données.
Il est également un éducateur dévoué, enseignant le programme de Master Big Data à l'Université de Navarre, et contribuant régulièrement à des articles perspicaces sur la science des données sur Medium et KDNuggets.
Il est titulaire d'une licence en ingénierie physique de l'université polytechnique de Catalogne et d'une maîtrise en systèmes interactifs intelligents de l'université Pompeu Fabra.
Actuellement, il s'engage avec passion à rendre les technologies liées aux données plus accessibles à un public plus large par le biais de la publication ForCode'Sake sur Medium.
