Polarys
Docker & conteneurs/Réseau Docker

Réseau Docker

Réseaux Docker

Réseaux Docker

Docker crée son propre réseau virtuel. Comprendre les drivers réseau est essentiel pour faire communiquer les conteneurs entre eux et avec l'extérieur.

Les drivers réseau

graph TD
    HW[Interface réseau hôte eth0/192.168.1.x]
    BR[Bridge docker0
172.17.0.0/16]
    C1[Conteneur 1
172.17.0.2]
    C2[Conteneur 2
172.17.0.3]
    NET[Réseau personnalisé
172.18.0.0/16]
    C3[Conteneur 3
172.18.0.2]
    C4[Conteneur 4
172.18.0.3]

    HW --> BR
    BR --> C1
    BR --> C2
    HW --> NET
    NET --> C3
    NET --> C4
DriverDescriptionUsage
bridgeRéseau privé virtuel (défaut)Conteneurs sur un même hôte
hostPartage la pile réseau hôteHaute performance, pas d'isolation réseau
noneAucun réseauConteneurs isolés complètement
overlayMulti-hôtesDocker Swarm / clustering

Créer et utiliser des réseaux personnalisés

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

# Créer avec sous-réseau spécifique
docker network create --subnet 192.168.100.0/24 --gateway 192.168.100.1 mon-reseau

# Lister les réseaux
docker network ls

# Inspecter un réseau
docker network inspect mon-reseau

# Lancer des conteneurs sur ce réseau
docker run -d --name web --network mon-reseau nginx
docker run -d --name db --network mon-reseau mysql:8

# Les conteneurs se joignent par leur nom (DNS Docker interne)
docker exec web ping db   # fonctionne !

Avantage réseau personnalisé : résolution DNS automatique par nom de conteneur. Sur le réseau bridge par défaut, les conteneurs ne se voient que par IP.

Exposition des ports

# Publier un port (hôte:conteneur)
docker run -d -p 8080:80 nginx       # accessible de partout
docker run -d -p 127.0.0.1:8080:80 nginx  # accessible que depuis localhost

# Publier tous les ports exposés (EXPOSE dans Dockerfile) sur des ports aléatoires
docker run -d -P nginx
docker port nginx  # voir les mappings

# Connecter un conteneur existant à un second réseau
docker network connect mon-reseau2 mon-conteneur

Cas concret : réseau isolé pour une app web + DB

# Réseau interne (DB non exposée sur l'hôte)
docker network create app-network

# Base de données : uniquement visible sur app-network
docker run -d   --name postgres   --network app-network   -e POSTGRES_PASSWORD=secret   -e POSTGRES_DB=myapp   postgres:16

# Application web : exposée sur le port 8000 de l'hôte
docker run -d   --name web-app   --network app-network   -p 8000:8000   -e DATABASE_URL=postgresql://postgres:secret@postgres/myapp   mon-app:latest

# La DB n'est pas accessible depuis l'hôte directement
# Seule web-app peut joindre postgres (par son nom)

Erreurs fréquentes

  • Réseau bridge par défaut : pas de DNS : les conteneurs sur le réseau bridge par défaut ne se voient que par IP, pas par nom. Toujours créer un réseau personnalisé pour le DNS.
  • Oublier d'ouvrir le pare-feu hôte : -p 8080:80 ajoute une règle iptables, mais un pare-feu système (firewalld, ufw) peut bloquer le trafic.
  • Exposer inutilement les ports DB : une base de données ne devrait jamais être exposée avec -p 5432:5432 en production. Utiliser un réseau Docker interne.

À retenir

  • Réseau bridge personnalisé → DNS par nom de conteneur.
  • -p hôte:conteneur → accès depuis l'extérieur.
  • Ne pas exposer les ports de bases de données sur l'hôte.
  • docker network create + --network mon-reseau → isolation propre.

Quiz de validation

Quiz - 2 questions

1. Pourquoi créer un réseau Docker personnalisé plutôt qu'utiliser le réseau bridge par défaut ?

2. Comment limiter l'accès d'un port publié à localhost uniquement ?

Suis ta progression

Crée un compte gratuit pour suivre ta progression et accéder à toutes les leçons.