1. Architecture réseau Docker

Docker dispose de son propre sous-système réseau. Chaque conteneur possède une interface réseau virtuelle connectée à un réseau Docker.

# Réseaux créés par défaut à l'installation
docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
abc123         bridge    bridge    local   ← réseau par défaut
def456         host      host      local
ghi789         none      null      local

2. Drivers réseau

DriverDescriptionCas d'usage
bridgeRéseau virtuel privé sur l'hôteDéfaut — conteneurs isolés sur une même machine
hostPartage le réseau de l'hôteHautes performances, sans isolation réseau
noneAucun réseauIsolation complète, calcul offline
overlayRéseau multi-hôtes (Docker Swarm)Orchestration distribuée
macvlanAdresse MAC propre sur le réseau physiqueAccès réseau physique direct

3. Bridge network (réseau personnalisé)

Créer un réseau bridge personnalisé au lieu d'utiliser le réseau bridge par défaut permet la résolution DNS par nom entre conteneurs.

# Créer un réseau bridge
docker network create mon-reseau

# Avec options
docker network create \
  --driver bridge \
  --subnet 172.20.0.0/16 \
  --gateway 172.20.0.1 \
  app-network

# Connecter un conteneur au démarrage
docker run -d \
  --name api \
  --network app-network \
  monapi:latest

# Connecter un conteneur existant
docker network connect app-network db-container

# Déconnecter
docker network disconnect app-network db-container

4. DNS inter-conteneurs

Sur un réseau bridge personnalisé, les conteneurs se trouvent par leur nom (pas besoin de connaître l'IP) :

# Créer réseau et deux conteneurs
docker network create app-net

docker run -d --name database --network app-net postgres
docker run -d --name api      --network app-net \
  -e DB_HOST=database \   # ← nom DNS = nom du conteneur !
  monapi

# L'API peut pinguer la base avec son nom
docker exec api ping database   # fonctionne !
docker exec api ping 172.x.x.x  # aussi, mais non recommandé
Réseau bridge par défaut vs personnalisé : Sur le réseau bridge par défaut, la résolution DNS par nom ne fonctionne PAS. Toujours créer un réseau personnalisé pour les projets.

5. Commandes réseau

docker network ls                          # Lister
docker network inspect app-net            # Détails JSON
docker network create  app-net            # Créer
docker network rm      app-net            # Supprimer
docker network connect app-net mon-conteneur  # Connecter
docker network disconnect app-net ct     # Déconnecter
docker network prune                       # Supprimer inutilisés

# Mode host : le conteneur partage le réseau de l'hôte
docker run --network host nginx

# Mode none : isolation totale
docker run --network none monapp

6. Isolation et sécurité réseau

# Architecture typique à 3 tiers
docker network create frontend-net  # nginx ↔ api
docker network create backend-net   # api ↔ db

docker run -d --name nginx    --network frontend-net nginx
docker run -d --name api      --network frontend-net monapi
docker network connect backend-net api  # api sur les 2 réseaux
docker run -d --name db       --network backend-net postgres

# nginx NE PEUT PAS atteindre db directement → isolation !