--- title: Réseaux Docker description: Relier les services avec un réseau privé et la résolution DNS interne. --- ## Des conteneurs isolés Chaque conteneur possède sa propre pile réseau. Pour que le backend puisse joindre PostgreSQL et que Nginx puisse joindre le frontend, leurs conteneurs doivent partager un réseau. ## Réseau bridge et noms de services Compose crée un réseau et y attache les services. Sur ce réseau, Docker fournit un DNS interne : chaque service est joignable avec son nom. ```yaml networks: app-network: driver: bridge services: postgres: networks: - app-network backend: networks: - app-network environment: POSTGRES_HOST: postgres MINIO_HOST: minio SMTP_HOST: mailpit ``` Le backend se connecte à la base avec l'hôte `postgres`. Docker résout ce nom vers l'adresse interne du conteneur correspondant. Les adresses IP peuvent changer à chaque redémarrage ; les noms de services restent stables. À l'intérieur d'un conteneur, localhost désigne ce même conteneur. Pour joindre un autre service, utilise son nom Compose, jamais localhost. ## Isolation entre les stacks Deux projets Compose distincts créent chacun leur réseau bridge. Leurs services ne se voient pas par défaut. Cette isolation permet notamment de lancer plusieurs stacks de tests en parallèle sans qu'elles communiquent entre elles. ## Segmenter l'application Un service peut appartenir à plusieurs réseaux. On peut ainsi exposer Nginx au réseau frontal tout en gardant PostgreSQL uniquement sur un réseau interne : ```yaml networks: public: private: services: nginx: networks: - public - private backend: networks: - private postgres: networks: - private ``` Seuls les services partageant un réseau peuvent communiquer directement.