← Docker — livraison et exploitation des applications

Module 4 / 8 · 90 min

Réseaux, DNS et publication de ports

Relier les services sans publier inutilement les dépendances.

Lessons, exercises and questions in this path are in French. The interface follows the site language.

Your progress will appear here when JavaScript is active.

Progress and best score are stored only in this browser. No account is needed; clearing browser data removes them. Module times are estimates including exercises.

Comprendre le mécanisme

Le réseau d’un conteneur est distinct du contexte réseau de l’application hôte. Dans un conteneur, localhost désigne normalement ce conteneur, pas un autre service. Sur un réseau utilisateur approprié, les services peuvent se joindre par leurs noms. Publier un port associe une écoute hôte à une écoute de conteneur ; EXPOSE documente une intention dans l’image mais ne crée pas à lui seul cette publication.

Raisonner et vérifier

Ne publiez une base sur l’hôte que si un besoin explicite le justifie et contrôlez l’interface d’écoute. Une communication interne entre services n’exige pas nécessairement une ouverture publique. Vérifiez les chemins réels : navigateur vers reverse proxy, proxy vers application, application vers base. Un test depuis l’hôte ne démontre pas toute la résolution DNS interne.

EXPOSE est une indication de l’image

EXPOSE documente un port attendu par le service ; cette instruction ne publie pas automatiquement ce port sur les interfaces de l’hôte. La publication demande une configuration de lancement distincte. Lors d’une revue, séparez ce que l’image décrit de ce que l’instance expose réellement. Une ligne présente dans le Dockerfile ne prouve donc ni accessibilité depuis Internet ni isolement complet du service.

Understand this common mistake

EXPOSE publie automatiquement le port sur toutes les interfaces hôtes.

La publication réseau demande une configuration distincte.

L’adresse de binding fixe une portée

Publier un port avec une adresse hôte explicite choisit une portée d’écoute selon le contexte. Une liaison à 127.0.0.1 n’a pas le même périmètre qu’une écoute générale. Vérifiez les règles du moteur et de l’hôte réellement utilisés. Le test doit provenir d’un point de réseau pertinent : une connexion locale réussie ne prouve pas l’accès depuis l’extérieur, et l’inverse ne doit pas être supposé.

Understand this common mistake

Publier un port implique toujours localhost seulement.

La portée dépend de l’adresse et des paramètres.

Localhost appartient au contexte courant

Dans le modèle réseau habituel du conteneur, localhost désigne son propre contexte de boucle locale. Il ne signifie pas automatiquement le conteneur voisin ni le serveur de base. Pour joindre une dépendance, utilisez le nom et le réseau prévus par le déploiement. Exécutez le diagnostic depuis le conteneur applicatif afin d’exercer sa résolution et sa connectivité, pas seulement celles du poste hôte.

Understand this common mistake

localhost désigne forcément le conteneur voisin.

Les espaces réseau ont leurs propres boucles locales.

Résoudre les services par leur contrat

Un réseau Compose peut fournir une résolution par nom de service. Ce nom permet d’éviter de traiter une adresse d’instance éphémère comme une identité fixe éternelle. La présence du nom ne prouve pas encore la disponibilité métier de la dépendance. Testez résolution, connexion et requête utile séparément pour localiser une panne sans attribuer à tout échec SQL une cause de mot de passe.

Understand this common mistake

Les IP de conteneurs doivent être supposées fixes pour toujours.

Le nom est une abstraction plus stable selon le contrat réseau.

Vérifier la frontière effectivement exposée

Les ports publiés, interfaces et règles de pare-feu participent à l’accès réel. Une étiquette private dans un document ne bloque pas une publication ouverte. Inventoriez les services qui ont besoin d’une entrée externe et ceux qui peuvent rester sur un réseau interne. Le contrôle doit observer le chemin déployé ; un fichier de configuration seul ne démontre pas que toutes ses règles sont appliquées.

Understand this common mistake

Une étiquette private rend toute exposition impossible.

Les accès effectifs dépendent de la configuration réelle.

TLS se termine quelque part

Une terminaison TLS au proxy protège le canal jusqu’à cette frontière. Elle ne chiffre pas automatiquement la connexion interne vers l’application. Décrivez chaque saut et les hypothèses de confiance correspondantes. La configuration du proxy doit aussi maîtriser les champs de contexte transmis. Le schéma annoncé par un client non fiable ne doit pas décider librement de la sécurité perçue du parcours.

Understand this common mistake

La présence d’un proxy chiffre automatiquement tout réseau interne.

Chaque saut doit avoir son propre modèle de protection.

Communiquer sans publication hôte

Deux services connectés à un réseau prévu peuvent communiquer sans que chaque port soit publié vers l’hôte ou Internet. Une base réservée à l’application n’a donc pas nécessairement besoin d’une exposition externe. Cela ne supprime pas l’authentification et les permissions SQL. Limitez les voies d’accès utiles, puis testez le parcours réellement utilisé par le consommateur plutôt qu’ouvrir une interface supplémentaire uniquement pour faciliter un diagnostic.

Understand this common mistake

Absence de port hôte signifie absence de toute communication.

Les réseaux internes peuvent permettre des échanges.

L’absence de port public ne bloque pas les sorties

Une politique d’entrée et une politique de sortie répondent à des directions différentes. Un conteneur sans port publié peut encore appeler des services distants selon sa configuration. Pour un client HTTP piloté par des données reçues, limitez les destinations et les budgets. La confidentialité d’une dépendance interne ne doit pas être supposée à partir de la seule absence d’une publication de port sur l’application.

Understand this common mistake

Un conteneur sans port publié ne peut contacter aucune destination.

Entrée et sortie sont des directions distinctes.

DNS et redirections peuvent changer la destination

Un nom initialement admis peut conduire à d’autres adresses, et une redirection peut choisir un autre hôte. Le client doit suivre un contrat de sortie maîtrisé sur tout le parcours. Évitez de considérer HTTPS comme une autorisation universelle de destination. Les tests doivent simuler un partenaire qui redirige hors du périmètre et vérifier que le service ne contacte pas librement une ressource interne.

Understand this common mistake

Un nom autorisé prouve toute destination réseau future.

La résolution et les sauts peuvent modifier la destination effective.

Observer depuis les bons points

Un diagnostic réseau doit préciser d’où la demande est émise et quel saut il mesure. L’hôte, un conteneur applicatif et un navigateur distant peuvent avoir des résolutions et règles différentes. Conservez les versions, noms et erreurs expurgées. Cette chronologie évite les corrections aveugles, comme publier la base mondialement alors que le défaut concernait seulement le nom de service utilisé dans le conteneur.

Understand this common mistake

Un fichier YAML suffit à prouver toute connectivité déployée.

Les règles et le runtime doivent être confrontés.

Atelier guidé : lire, expliquer et vérifier le code

services:
  api:
    image: example/lab-api:1
    ports:
      - "127.0.0.1:8080:80"

La publication montrée utilise 127.0.0.1 comme adresse hôte et 8080 comme port hôte, vers le port 80 du conteneur. Elle demande donc une portée locale dans ce contexte, pas une écoute générale du port 80 de l’hôte. Le registre d’image n’est pas l’interface de publication et ne décide pas de cette adresse.

Vérifiez le mapping dans un laboratoire depuis l’hôte puis depuis un autre point réseau prévu pour le test. Comparez avec une communication entre services qui utilise le réseau interne plutôt que le port publié. Documentez les résultats sans les extrapoler à toute topologie. Une configuration peut être correcte pour un proxy local et insuffisante ou trop large pour un autre mode de déploiement.

Worked example

docker network create lab-network
# Deux services du laboratoire peuvent ensuite rejoindre lab-network.
# Une publication locale illustrative :
docker run --rm -p 127.0.0.1:8081:80 nginx:alpine

Le port 80 du conteneur est accessible ici via 8081 sur la boucle locale de l’hôte. Ce fragment ne publie pas le service sur toutes les interfaces hôte.

Practical exercise

Dessinez le réseau de trois services et n’exposez vers l’hôte que le point d’entrée nécessaire.

View a suggested solution

Placez application et base sur un réseau partagé, utilisez le nom de service pour la connexion et testez depuis le conteneur appelant. Contrôlez les ports réellement publiés.

Verification checklist

  • Distinguer port hôte et port conteneur.
  • Ne pas utiliser localhost pour désigner un autre service.
  • Tester le DNS depuis le bon contexte.

Knowledge check

Related lesson: Réseaux, DNS et publication de ports ↗
Dans un conteneur applicatif, localhost désigne normalement quoi ?

Reference documentation ↗

Module validation

101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.

Start or resume the 101 questions →