
Gérer les réseaux Docker (docker network create, ls, inspect, rm, connect, disconnect)
Maîtrisez la gestion des réseaux Docker avec les commandes CLI : création, inspection, connexion/déconnexion de conteneurs et suppression de réseaux.
Introduction à la gestion des réseaux Docker via la CLI
Si les réseaux par défaut (`bridge`, `host`, `none`) couvrent certains besoins, la véritable puissance du système réseau de Docker réside dans la capacité à créer et gérer des réseaux personnalisés, dits "définis par l'utilisateur" (user-defined networks). Ces réseaux offrent une meilleure isolation, une découverte de services intégrée par nom de conteneur, et un contrôle plus fin sur la topologie réseau. Pour interagir avec ces réseaux ainsi qu'avec les réseaux par défaut, Docker fournit une suite de commandes regroupées sous `docker network`.
Maîtriser ces commandes est indispensable pour configurer la connectivité de vos applications multi-conteneurs, pour dépanner des problèmes réseau, ou simplement pour maintenir un environnement Docker propre et organisé. Nous allons explorer les commandes les plus importantes : `ls` pour lister, `create` pour créer, `inspect` pour examiner, `rm` pour supprimer, `connect` pour attacher un conteneur existant, `disconnect` pour le détacher, et `prune` pour le nettoyage.
Lister les réseaux disponibles : `docker network ls`
La première étape pour comprendre l'état actuel de votre environnement réseau Docker est de lister les réseaux existants. La commande `docker network ls` (ou sa forme longue `docker network list`) affiche tous les réseaux présents sur l'hôte Docker, y compris les réseaux par défaut créés lors de l'installation et ceux que vous avez créés.
L'exécution simple de la commande affiche généralement l'identifiant du réseau (NETWORK ID), son nom (NAME), le pilote réseau utilisé (DRIVER), et sa portée (SCOPE, indiquant généralement `local` pour les réseaux `bridge` ou `host` sur un seul hôte, ou `swarm` pour les réseaux `overlay`).
docker network ls
NETWORK ID NAME DRIVER SCOPE
1a2b3c4d5e6f bridge bridge local
7g8h9i0j1k2l host host local
3m4n5o6p7q8r my_custom_net bridge local
9s0t1u2v3w4x none null local
...Cette commande fournit un aperçu rapide mais essentiel. Vous pouvez utiliser des filtres avec l'option `-f` ou `--filter` pour affiner la liste, par exemple, en ne montrant que les réseaux utilisant un pilote spécifique (`--filter driver=bridge`) ou créés après une certaine date.
Créer des réseaux personnalisés : `docker network create`
La commande `docker network create` est fondamentale pour établir des environnements réseau isolés et configurés selon vos besoins. Par défaut, si aucun pilote n'est spécifié, elle crée un réseau de type `bridge`.
La syntaxe de base est simplement `docker network create
docker network create app-networkVous pouvez spécifier explicitement le pilote avec l'option `-d` ou `--driver`. Ceci est nécessaire pour créer des réseaux d'autres types, comme `overlay` pour Swarm :
# Crée un réseau overlay pour Docker Swarm (nécessite d'être en mode Swarm)
docker network create --driver overlay my-overlay-netPour les réseaux `bridge` et `overlay`, vous pouvez exercer un contrôle plus fin sur l'adressage IP en utilisant des options comme :
- `--subnet`: Définit le sous-réseau CIDR pour le réseau (ex: `--subnet=172.20.0.0/16`).
- `--gateway`: Spécifie l'adresse IP de la passerelle pour ce sous-réseau (ex: `--gateway=172.20.0.1`).
- `--ip-range`: Définit une plage d'adresses IP à allouer aux conteneurs au sein du sous-réseau (ex: `--ip-range=172.20.10.0/24`).
- `--aux-address`: Permet de réserver des adresses IP spécifiques au sein du réseau.
Exemple de création d'un réseau bridge avec configuration IP personnalisée :
docker network create \
--driver bridge \
--subnet=192.168.42.0/24 \
--gateway=192.168.42.1 \
backend-netDes options spécifiques au pilote peuvent être passées avec `-o` ou `--option`, par exemple pour activer le chiffrement sur un réseau `overlay` (`--opt encrypted`).
Examiner les détails d'un réseau : `docker network inspect`
Une fois un réseau créé ou pour comprendre la configuration d'un réseau existant, la commande `docker network inspect` est votre outil principal. Elle fournit une sortie détaillée au format JSON contenant toutes les informations de configuration et l'état actuel du réseau spécifié.
La syntaxe est `docker network inspect
docker network inspect app-networkLa sortie JSON contiendra des informations cruciales :
- `Name`: Le nom du réseau.
- `Id`: L'identifiant unique.
- `Driver`: Le pilote utilisé.
- `Scope`: La portée (local, swarm).
- `IPAM` (IP Address Management): Détails sur la configuration IP (Driver, Subnet, Gateway, IP Range, etc.).
- `Containers`: Une liste des conteneurs actuellement connectés à ce réseau, avec leurs adresses IP et MAC respectives sur ce réseau.
- `Options`: Les options spécifiques au pilote configurées.
- `Labels`: Les éventuels labels associés au réseau.
L'inspection est indispensable pour le débogage, pour vérifier quels conteneurs sont connectés, ou pour comprendre la configuration IP d'un réseau avant d'y connecter de nouveaux services.
Connecter/Déconnecter un conteneur en cours : `connect` et `disconnect`
Il est possible de connecter ou déconnecter un conteneur déjà en cours d'exécution à un ou plusieurs réseaux Docker (à l'exception du réseau `host`). Ceci est utile pour ajouter dynamiquement une connectivité à un service ou pour l'isoler temporairement.
Pour connecter un conteneur, utilisez `docker network connect
# Connecte le conteneur 'web-server' au réseau 'backend-net'
docker network connect backend-net web-serverVous pouvez spécifier une adresse IP fixe pour le conteneur sur ce réseau avec `--ip
Inversement, pour déconnecter un conteneur d'un réseau, utilisez `docker network disconnect
# Déconnecte 'web-server' du réseau 'backend-net'
docker network disconnect backend-net web-serverUn conteneur doit être connecté à au moins un réseau pour pouvoir communiquer (sauf s'il utilise le pilote `host` ou `none`). Vous ne pouvez pas déconnecter un conteneur de son dernier réseau sans l'arrêter.
Supprimer des réseaux : `docker network rm`
Lorsque vous n'avez plus besoin d'un réseau défini par l'utilisateur, vous pouvez le supprimer avec la commande `docker network rm` (ou `docker network remove`). Cela permet de garder votre environnement Docker propre.
La syntaxe est `docker network rm
# Supprime les réseaux 'app-network' et 'old-test-net'
docker network rm app-network old-test-netUne contrainte importante : Docker vous empêchera de supprimer un réseau si un conteneur (même arrêté) ou un service Swarm y est toujours connecté. Vous devez d'abord déconnecter ou supprimer tous les points d'extrémité (endpoints) attachés à ce réseau avant de pouvoir le supprimer. Cela évite de laisser des conteneurs dans un état réseau invalide.
Notez également que vous ne pouvez pas supprimer les réseaux prédéfinis (`bridge`, `host`, `none`).
Nettoyage des réseaux orphelins : `docker network prune`
Au fil du temps, notamment lors de tests ou de déploiements/suppressions fréquents, vous pouvez accumuler des réseaux définis par l'utilisateur qui ne sont plus utilisés par aucun conteneur. La commande `docker network prune` est un raccourci pratique pour supprimer tous les réseaux locaux non utilisés.
L'exécution de `docker network prune` vous demandera une confirmation avant de procéder, car l'opération est irréversible.
docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
network1
network2
...Utilisez cette commande avec prudence, mais elle est très utile pour libérer des ressources et maintenir la clarté de votre configuration réseau. Vous pouvez utiliser l'option `--filter` pour affiner le nettoyage, par exemple en ne supprimant que les réseaux inutilisés créés avant une certaine date (`--filter "until=24h"`).