Réseau Docker

Un réseau Docker permet aux conteneurs de communiquer entre eux et avec l’extérieur (hôte ou Internet).
Docker crée et gère certains réseaux automatiquement, mais il est aussi possible d’en définir de nouveaux pour contrôler l’isolation et la connectivité.


Types de réseaux par défaut

Docker installe trois réseaux de base :

Réseau

Description

bridge

Réseau privé interne par défaut. Les conteneurs connectés peuvent communiquer entre eux.

host

Le conteneur partage directement la pile réseau de l’hôte (pas de NAT).

none

Le conteneur n’a aucune interface réseau.

Exemple :

docker network ls

Réseau bridge

  • Réseau local interne créé automatiquement par Docker.

  • Les conteneurs obtiennent une adresse IP privée et peuvent communiquer via cette passerelle.

  • Par défaut, ils ne se résolvent pas par nom → il faut créer un réseau bridge personnalisé pour que la résolution DNS fonctionne.

Exemple :

docker run -d --name web --network bridge nginx

Réseau host

  • Le conteneur partage exactement le réseau de la machine hôte.

  • Pas d’isolation réseau, pas de NAT.

  • Avantage : performance (moins de latence).

  • Inconvénient : moins de sécurité et risque de conflit de ports.

Exemple :

docker run -d --network host nginx

Réseau none

  • Le conteneur est totalement isolé du réseau.

  • Seul lo (localhost) est présent.

  • Utile pour des traitements 100% hors ligne.

Exemple :

docker run -d --network none alpine sleep 3600

Réseaux personnalisés (bridge)

On peut créer ses propres réseaux pour améliorer l’organisation et la communication entre services.

docker network create monreseau
docker run -d --name db --network monreseau mysql
docker run -d --name web --network monreseau nginx

image

Les conteneurs db et web peuvent communiquer entre eux par leur nom grâce au DNS intégré de Docker.


Réseaux overlay

Un réseau overlay permet de connecter des conteneurs situés sur plusieurs hôtes différents.
Il repose sur une surcouche réseau (VXLAN) qui encapsule le trafic entre machines.

image

  • Nécessite Docker Swarm ou un autre orchestrateur (ex. Kubernetes avec CNI).

  • Les conteneurs connectés à un overlay se voient comme s’ils étaient sur le même LAN, même s’ils tournent sur des hôtes différents.

  • Géré automatiquement par Swarm pour les services distribués.

Exemple (avec Swarm actif) :

docker network create -d overlay monreseau_overlay
docker service create --name web --network monreseau_overlay nginx
docker service create --name db --network monreseau_overlay mysql

Commandes essentielles

# Lister les réseaux
docker network ls

# Inspecter un réseau
docker network inspect monreseau

# Connecter un conteneur à un réseau existant
docker network connect monreseau web

# Déconnecter un conteneur
docker network disconnect monreseau web

Bonnes pratiques

  • Utiliser des réseaux bridge personnalisés pour bénéficier de la résolution DNS.

  • Séparer les réseaux front-end (web) et back-end (base de données) pour limiter la surface d’exposition.

  • Préférer bridge plutôt que host, sauf besoin spécifique de performance.

  • Documenter les ports exposés pour éviter les conflits.

  • Pour un déploiement multi-hôtes, utiliser overlay avec un orchestrateur.

  • Tester l’isolation réseau (ping, curl) pour valider la configuration.