Comment utiliser la commande docker network connect 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 (lab), vous apprendrez à gérer efficacement les réseaux de conteneurs à l'aide de la commande docker network connect. Vous explorerez comment connecter un conteneur en cours d'exécution à un réseau existant, connecter un conteneur à un réseau lors de son démarrage initial, spécifier une adresse IP statique pour un conteneur sur un réseau et créer des alias de réseau pour les conteneurs afin de faciliter une communication plus aisée.

Grâce à des exercices pratiques, vous acquerrez une expérience pratique dans la manipulation des configurations de réseau de conteneurs, vous permettant de construire des applications Dockerisées plus robustes et interconnectées.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555173{{"Comment utiliser la commande docker network connect pour gérer les réseaux de conteneurs"}} docker/ps -.-> lab-555173{{"Comment utiliser la commande docker network connect pour gérer les réseaux de conteneurs"}} docker/rm -.-> lab-555173{{"Comment utiliser la commande docker network connect pour gérer les réseaux de conteneurs"}} docker/network -.-> lab-555173{{"Comment utiliser la commande docker network connect pour gérer les réseaux de conteneurs"}} end

Connecter un conteneur en cours d'exécution à un réseau

Dans cette étape, vous apprendrez à connecter un conteneur Docker en cours d'exécution à un réseau existant. Cela est utile lorsque vous avez un conteneur déjà en cours d'exécution et que vous avez besoin qu'il communique avec d'autres conteneurs ou services sur un réseau spécifique.

Tout d'abord, créons un nouveau réseau que nous utiliserons pour cette démonstration. Nous allons créer un réseau bridge nommé my-network.

docker network create my-network

Vous devriez voir une sortie similaire à celle-ci, indiquant que le réseau a été créé avec succès :

<network_id>

Maintenant, exécutons un simple conteneur qui n'est pas initialement connecté à my-network. Nous allons exécuter un conteneur alpine en mode détaché (-d) et le nommer my-container.

docker run -d --name my-container alpine sleep infinity

La sortie sera l'ID du conteneur :

<container_id>

Pour vérifier que le conteneur est en cours d'exécution et n'est pas connecté à my-network, vous pouvez inspecter les paramètres réseau du conteneur.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

La sortie montrera le réseau bridge par défaut, mais pas my-network :

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Maintenant, connectons le conteneur my-container en cours d'exécution au réseau my-network en utilisant la commande docker network connect.

docker network connect my-network my-container

Il n'y aura pas de sortie si la commande est exécutée avec succès.

Pour vérifier que le conteneur est maintenant connecté à my-network, inspectons à nouveau les paramètres réseau du conteneur.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

Cette fois, la sortie devrait montrer à la fois le réseau bridge par défaut et my-network :

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  },
  "my-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Enfin, nettoyons le conteneur et le réseau que nous avons créés.

docker stop my-container
docker rm my-container
docker network rm my-network

Connecter un conteneur à un réseau lors de son démarrage

Dans cette étape, vous apprendrez à connecter un conteneur Docker à un réseau spécifique lors de son démarrage. C'est la méthode la plus courante pour vous assurer que vos conteneurs sont sur le bon réseau dès le départ.

Tout d'abord, créons un nouveau réseau nommé app-network que nous allons utiliser.

docker network create app-network

Vous devriez voir une sortie similaire à celle-ci, indiquant que le réseau a été créé avec succès :

<network_id>

Maintenant, nous allons exécuter un simple conteneur nginx et le connecter directement au réseau app-network lors de son démarrage. Nous utilisons le flag --network suivi du nom du réseau. Nous allons également l'exécuter en mode détaché (-d) et le nommer web-server.

docker run -d --name web-server --network app-network nginx

La sortie sera l'ID du conteneur :

<container_id>

Pour vérifier que le conteneur est connecté au réseau app-network, vous pouvez inspecter les paramètres réseau du conteneur.

docker inspect web-server --format '{{json .NetworkSettings.Networks}}'

La sortie devrait montrer que le conteneur est connecté au réseau app-network :

{
  "app-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Notez que cette fois-ci, le conteneur est uniquement connecté au réseau app-network et non au réseau bridge par défaut, car nous avons spécifié le réseau lors de la commande docker run.

Enfin, nettoyons le conteneur et le réseau.

docker stop web-server
docker rm web-server
docker network rm app-network

Spécifier l'adresse IP pour un conteneur sur un réseau

Dans cette étape, vous apprendrez à attribuer une adresse IP statique spécifique à un conteneur lors de sa connexion à un réseau. Par défaut, Docker attribue les adresses IP de manière dynamique à partir du sous-réseau du réseau. Cependant, dans certains cas, vous pourriez avoir besoin qu'un conteneur ait une adresse IP prévisible.

Tout d'abord, créons un nouveau réseau avec un sous-réseau spécifié. Nous allons créer un réseau bridge nommé static-net avec le sous-réseau 172.20.0.0/16.

docker network create --subnet 172.20.0.0/16 static-net

Vous devriez voir une sortie similaire à celle-ci, indiquant que le réseau a été créé avec succès :

<network_id>

Maintenant, nous allons exécuter un conteneur alpine et le connecter au réseau static-net, en spécifiant une adresse IP statique à l'aide du flag --ip. Nous allons attribuer l'adresse IP 172.20.0.10. Nous allons l'exécuter en mode détaché (-d) et le nommer static-ip-container.

docker run -d --name static-ip-container --network static-net --ip 172.20.0.10 alpine sleep infinity

La sortie sera l'ID du conteneur :

<container_id>

Pour vérifier que le conteneur a l'adresse IP statique attribuée sur le réseau static-net, inspectez les paramètres réseau du conteneur.

docker inspect static-ip-container --format '{{json .NetworkSettings.Networks}}'

La sortie devrait montrer le conteneur connecté au réseau static-net avec l'adresse IP spécifiée :

{
  "static-net": {
    "IPAMData": null,
    "IPAddress": "172.20.0.10",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Enfin, nettoyons le conteneur et le réseau.

docker stop static-ip-container
docker rm static-ip-container
docker network rm static-net

Créer des alias réseau pour un conteneur

Dans cette étape, vous apprendrez à créer des alias réseau pour un conteneur. Les alias réseau fournissent des noms alternatifs que d'autres conteneurs sur le même réseau peuvent utiliser pour résoudre et se connecter au conteneur. Cela est utile pour la découverte de services au sein d'un réseau Docker.

Tout d'abord, créons un nouveau réseau nommé alias-network.

docker network create alias-network

Vous devriez voir une sortie similaire à celle-ci, indiquant que le réseau a été créé avec succès :

<network_id>

Maintenant, nous allons exécuter un conteneur nginx et le connecter au réseau alias-network, en attribuant un alias réseau à l'aide du flag --network-alias. Nous allons attribuer l'alias web. Nous allons l'exécuter en mode détaché (-d) et le nommer alias-container.

docker run -d --name alias-container --network alias-network --network-alias web nginx

La sortie sera l'ID du conteneur :

<container_id>

Pour vérifier que le conteneur a l'alias réseau, inspectez les paramètres réseau du conteneur.

docker inspect alias-container --format '{{json .NetworkSettings.Networks}}'

La sortie devrait montrer le conteneur connecté au réseau alias-network et lister l'alias réseau :

{
  "alias-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "Aliases": ["web", "alias-container"],
    "DriverOpts": null
  }
}

Notez la partie "Aliases":["web","alias-container"] dans la sortie. Docker ajoute automatiquement le nom du conteneur comme alias également.

Maintenant, exécutons un autre conteneur sur le même réseau et essayons d'effectuer un ping au conteneur alias-container en utilisant son alias réseau web. Nous allons exécuter un conteneur alpine de manière interactive (-it) sur le réseau alias-network.

docker run -it --rm --network alias-network alpine ping -c 3 web

Vous devriez voir une sortie indiquant que les pings ont réussi vers le conteneur alias-container en utilisant l'alias web :

PING web (<ip_address>): 56 data bytes
64 bytes from <ip_address>: seq=0 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=1 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=2 ttl=64 time=0.xxx ms

--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.xxx/0.xxx/0.xxx/0.xxx ms

Cela démontre que les conteneurs sur le même réseau peuvent se résoudre et communiquer entre eux en utilisant des alias réseau.

Enfin, nettoyons les conteneurs et le réseau.

docker stop alias-container
docker rm alias-container
docker network rm alias-network

Résumé

Dans ce laboratoire, vous avez appris à gérer les réseaux de conteneurs Docker en utilisant la commande docker network connect. Vous avez pratiqué la connexion d'un conteneur en cours d'exécution à un réseau existant, démontrant ainsi comment ajouter dynamiquement une connectivité réseau à un conteneur après son démarrage.

De plus, vous avez exploré comment connecter un conteneur à un réseau spécifique au moment de sa création, spécifier une adresse IP statique pour un conteneur sur un réseau et créer des alias réseau pour fournir des noms alternatifs à un conteneur au sein d'un réseau, améliorant ainsi la détectabilité et la communication entre les conteneurs.