Comment utiliser la commande docker network create pour gérer les réseaux de conteneurs

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à gérer efficacement les réseaux de conteneurs à l'aide de la commande docker network create. Nous explorerons différents types de réseaux et configurations pour comprendre comment les conteneurs communiquent entre eux et avec le monde extérieur.

Plus précisément, vous aurez l'expérience pratique de création de réseaux ponts (bridge networks) de base, de personnalisation de réseaux ponts avec des sous-réseaux et des passerelles spécifiques, et de configuration de réseaux superposés (overlay networks) attachables et internes pour les scénarios de communication multi-hôtes. À la fin de ce laboratoire, vous aurez une bonne compréhension de la conception et de la mise en œuvre de diverses topologies de réseau pour vos conteneurs Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555174{{"Comment utiliser la commande docker network create pour gérer les réseaux de conteneurs"}} docker/rm -.-> lab-555174{{"Comment utiliser la commande docker network create pour gérer les réseaux de conteneurs"}} docker/exec -.-> lab-555174{{"Comment utiliser la commande docker network create pour gérer les réseaux de conteneurs"}} docker/inspect -.-> lab-555174{{"Comment utiliser la commande docker network create pour gérer les réseaux de conteneurs"}} docker/network -.-> lab-555174{{"Comment utiliser la commande docker network create pour gérer les réseaux de conteneurs"}} end

Créer un réseau pont de base

Dans cette étape, nous apprendrons à créer un réseau pont de base dans Docker. Un réseau pont (bridge network) est le type de réseau par défaut pour les conteneurs. Les conteneurs connectés au même réseau pont peuvent communiquer entre eux, tout en étant isolés des conteneurs sur d'autres réseaux ponts et du réseau de la machine hôte.

Tout d'abord, listons les réseaux Docker existants pour voir ceux par défaut.

docker network ls

Vous devriez voir certains réseaux par défaut tels que bridge, host et none. Le réseau bridge est celui avec lequel nous allons travailler.

Maintenant, créons un nouveau réseau pont. Nous l'appellerons my-bridge-network.

docker network create my-bridge-network

Cette commande crée un nouveau réseau pont avec les paramètres par défaut. Docker attribue automatiquement un sous-réseau et une passerelle à ce réseau.

Pour vérifier que le réseau a été créé avec succès, listez à nouveau les réseaux Docker.

docker network ls

Vous devriez maintenant voir my-bridge-network dans la liste.

Ensuite, examinons le réseau nouvellement créé pour voir ses détails, y compris le sous-réseau et la passerelle attribués par Docker.

docker network inspect my-bridge-network

La sortie de cette commande fournira des informations détaillées sur le réseau, comme son identifiant, le pilote (qui devrait être bridge), et le sous-réseau et la passerelle dans la section IPAM.

Maintenant, exécutons un conteneur et connectons-le à notre nouveau réseau. Nous utiliserons l'image alpine pour cet exemple. Si vous n'avez pas l'image alpine localement, Docker la téléchargera automatiquement.

docker run -d --name container1 --network my-bridge-network alpine sleep infinity

Cette commande exécute un conteneur nommé container1 en mode détaché (-d), le connecte à my-bridge-network (--network my-bridge-network), et le maintient en cours d'exécution en exécutant la commande sleep infinity.

Pour vérifier que le conteneur est en cours d'exécution et connecté au bon réseau, vous pouvez examiner le conteneur.

docker inspect container1

Dans la sortie, recherchez la section Networks. Vous devriez voir my-bridge-network répertorié, ainsi que l'adresse IP attribuée au conteneur au sein de ce réseau.

Enfin, exécutons un autre conteneur et connectons-le au même réseau pour démontrer la communication entre eux.

docker run -d --name container2 --network my-bridge-network alpine sleep infinity

Maintenant, container1 et container2 sont tous deux connectés à my-bridge-network. Ils devraient être en mesure de communiquer entre eux en utilisant leurs noms de conteneur ou leurs adresses IP au sein du réseau.

Pour tester la communication, nous pouvons exécuter une commande à l'intérieur de container1 pour ping container2. Tout d'abord, nous devons installer le paquet iputils dans les conteneurs alpine pour utiliser la commande ping.

docker exec container1 apk add --no-cache iputils
docker exec container2 apk add --no-cache iputils

Maintenant, ping container2 depuis container1.

docker exec container1 ping -c 3 container2

Vous devriez voir des réponses de ping réussies, indiquant que les deux conteneurs sur le même réseau pont peuvent communiquer.

Créer un réseau pont avec un sous-réseau et une passerelle personnalisés

Dans l'étape précédente, nous avons créé un réseau pont avec les paramètres par défaut. Docker a automatiquement attribué un sous-réseau et une passerelle. Dans cette étape, nous apprendrons à créer un réseau pont et à spécifier notre propre sous-réseau et notre propre passerelle. Cela vous donne plus de contrôle sur la configuration réseau de vos conteneurs.

Tout d'abord, supprimons les conteneurs et le réseau créés dans l'étape précédente pour repartir de zéro.

docker stop container1 container2
docker rm container1 container2
docker network rm my-bridge-network

Maintenant, créons un nouveau réseau pont nommé custom-bridge-network et spécifions un sous-réseau et une passerelle personnalisés en utilisant les options --subnet et --gateway. Nous utiliserons le sous-réseau 172.20.0.0/16 et la passerelle 172.20.0.1.

docker network create \
  --driver bridge \
  --subnet 172.20.0.0/16 \
  --gateway 172.20.0.1 \
  custom-bridge-network

L'option --driver bridge spécifie explicitement le pilote de réseau pont, bien qu'il soit le pilote par défaut. L'option --subnet définit la plage d'adresses IP pour le réseau, et l'option --gateway définit l'adresse IP de la passerelle pour les conteneurs connectés à ce réseau.

Pour vérifier que le réseau a été créé avec le sous-réseau et la passerelle spécifiés, examinez le réseau.

docker network inspect custom-bridge-network

Dans la sortie, regardez sous la section IPAM. Vous devriez voir les champs Subnet et Gateway correspondant aux valeurs que vous avez fournies (172.20.0.0/16 et 172.20.0.1).

Maintenant, exécutons un conteneur et connectons-le à notre nouveau réseau. Nous utiliserons à nouveau l'image alpine.

docker run -d --name custom-container1 --network custom-bridge-network alpine sleep infinity

Cette commande exécute un conteneur nommé custom-container1 et le connecte à custom-bridge-network. Docker attribuera une adresse IP à ce conteneur à partir du sous-réseau spécifié (172.20.0.0/16).

Pour vérifier l'adresse IP du conteneur au sein du réseau personnalisé, examinez le conteneur.

docker inspect custom-container1

Dans la sortie, sous la section Networks pour custom-bridge-network, vous devriez voir une IpAddress qui tombe dans la plage 172.20.0.0/16.

Exécutons un autre conteneur sur le même réseau.

docker run -d --name custom-container2 --network custom-bridge-network alpine sleep infinity

Maintenant, custom-container1 et custom-container2 sont tous deux sur le custom-bridge-network et devraient être en mesure de communiquer.

Comme dans l'étape précédente, nous avons besoin de iputils pour effectuer des pings.

docker exec custom-container1 apk add --no-cache iputils
docker exec custom-container2 apk add --no-cache iputils

Testez la communication en effectuant un ping de custom-container1 vers custom-container2.

docker exec custom-container1 ping -c 3 custom-container2

Vous devriez voir des réponses de ping réussies, confirmant la communication au sein du réseau pont personnalisé.

Créer un réseau overlay attachable pour la communication multi-hôtes

Les réseaux pont (bridge networks) sont adaptés pour la communication entre les conteneurs sur le même hôte Docker. Cependant, pour la communication entre les conteneurs s'exécutant sur différents hôtes Docker, vous avez besoin d'un réseau overlay. Les réseaux overlay sont créés et gérés par Docker Swarm.

Dans cette étape, nous allons créer un réseau overlay attachable. Un réseau overlay attachable permet aux conteneurs autonomes (non faisant partie d'un service Swarm) de se connecter à celui-ci et de communiquer à travers différents hôtes Docker.

Tout d'abord, nous devons initialiser Docker Swarm sur cet hôte. Cela est nécessaire pour créer et gérer les réseaux overlay.

docker swarm init --advertise-addr $(hostname -I | awk '{print $1}')

Cette commande initialise le Swarm et définit l'adresse d'annonce sur l'adresse IP de l'hôte. La sortie indiquera que le nœud actuel est maintenant un gestionnaire (manager) Swarm.

Maintenant que le Swarm est initialisé, nous pouvons créer un réseau overlay attachable. Nous l'appellerons my-overlay-network. L'option --attachable est cruciale pour permettre aux conteneurs autonomes de se connecter.

docker network create \
  --driver overlay \
  --attachable \
  my-overlay-network

L'option --driver overlay spécifie que nous créons un réseau overlay. L'option --attachable rend le réseau accessible aux conteneurs autonomes.

Pour vérifier que le réseau overlay a été créé, listez les réseaux Docker.

docker network ls

Vous devriez voir my-overlay-network dans la liste, et son pilote (driver) devrait être overlay.

Maintenant, exécutons un conteneur autonome et connectons-le à notre nouveau réseau overlay. Nous utiliserons l'image alpine.

docker run -d --name overlay-container1 --network my-overlay-network alpine sleep infinity

Cette commande exécute un conteneur nommé overlay-container1 et le connecte à my-overlay-network.

Pour vérifier que le conteneur est connecté au réseau overlay, examinez le conteneur.

docker inspect overlay-container1

Dans la sortie, recherchez la section Networks. Vous devriez voir my-overlay-network répertorié.

Étant donné que nous sommes dans un environnement mono-hôte, nous ne pouvons pas pleinement démontrer la communication multi-hôtes. Cependant, le réseau est configuré pour permettre cela si vous aviez plusieurs nœuds Swarm.

Exécutons un autre conteneur sur le même réseau overlay sur ce seul hôte.

docker run -d --name overlay-container2 --network my-overlay-network alpine sleep infinity

Maintenant, overlay-container1 et overlay-container2 sont tous deux sur le my-overlay-network et devraient être en mesure de communiquer.

Installez iputils dans les conteneurs pour effectuer des pings.

docker exec overlay-container1 apk add --no-cache iputils
docker exec overlay-container2 apk add --no-cache iputils

Testez la communication en effectuant un ping de overlay-container1 vers overlay-container2.

docker exec overlay-container1 ping -c 3 overlay-container2

Vous devriez voir des réponses de ping réussies, confirmant la communication au sein du réseau overlay sur ce seul hôte.

Créer un réseau overlay interne

Dans l'étape précédente, nous avons créé un réseau overlay attachable permettant aux conteneurs autonomes de se connecter. Dans cette étape, nous allons créer un réseau overlay interne. Les réseaux internes sont isolés des réseaux externes, ce qui signifie que les conteneurs sur un réseau interne ne peuvent pas communiquer avec le monde extérieur (y compris le réseau de l'hôte Docker) à moins d'être explicitement autorisés. Cela est utile pour créer des réseaux de services isolés au sein d'un Swarm.

Tout d'abord, nettoyons les conteneurs et le réseau de l'étape précédente.

docker stop overlay-container1 overlay-container2
docker rm overlay-container1 overlay-container2
docker network rm my-overlay-network

Maintenant, créons un réseau overlay interne nommé my-internal-network. Nous utilisons l'option --internal pour cela.

docker network create \
  --driver overlay \
  --internal \
  my-internal-network

L'option --internal garantit que les conteneurs connectés à ce réseau ne peuvent pas communiquer avec les réseaux externes.

Pour vérifier que le réseau overlay interne a été créé, listez les réseaux Docker.

docker network ls

Vous devriez voir my-internal-network dans la liste avec le pilote (driver) overlay.

Maintenant, exécutons un conteneur et connectons-le à notre nouveau réseau interne. Nous utiliserons l'image alpine.

docker run -d --name internal-container1 --network my-internal-network alpine sleep infinity

Cette commande exécute un conteneur nommé internal-container1 et le connecte à my-internal-network.

Pour vérifier que le conteneur est connecté au réseau interne, examinez le conteneur.

docker inspect internal-container1

Dans la sortie, recherchez la section Networks. Vous devriez voir my-internal-network répertorié.

Exécutons un autre conteneur sur le même réseau interne.

docker run -d --name internal-container2 --network my-internal-network alpine sleep infinity

Maintenant, internal-container1 et internal-container2 sont tous deux sur le my-internal-network. Ils devraient être en mesure de communiquer entre eux, mais pas avec le monde extérieur.

Installez iputils dans les conteneurs pour effectuer des pings.

docker exec internal-container1 apk add --no-cache iputils
docker exec internal-container2 apk add --no-cache iputils

Testez la communication en effectuant un ping de internal-container1 vers internal-container2.

docker exec internal-container1 ping -c 3 internal-container2

Vous devriez voir des réponses de ping réussies, confirmant la communication au sein du réseau overlay interne.

Maintenant, essayons d'effectuer un ping vers une adresse externe, comme google.com, depuis internal-container1.

docker exec internal-container1 ping -c 3 google.com

Ce ping devrait échouer car le réseau interne est isolé des réseaux externes.

Résumé

Dans ce laboratoire (lab), nous avons appris à utiliser la commande docker network create pour gérer les réseaux de conteneurs. Nous avons commencé par créer un réseau pont (bridge network) de base, qui est le type de réseau par défaut pour les conteneurs, et avons vérifié sa création et ses détails en utilisant docker network ls et docker network inspect. Nous avons ensuite montré comment connecter un conteneur à ce réseau nouvellement créé.

En nous appuyant sur le réseau pont de base, nous avons exploré la création d'un réseau pont avec un sous-réseau (subnet) personnalisé et une passerelle (gateway) pour avoir plus de contrôle sur l'adressage IP du réseau. Enfin, nous avons approfondi la création de réseaux overlay, en particulier un réseau overlay attachable pour la communication multi-hôtes et un réseau overlay interne pour une communication isolée au sein d'un swarm, mettant en évidence la polyvalence de la mise en réseau Docker pour différents scénarios de déploiement.