⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Publication et exposition des ports

Explication

Si vous avez suivi les guides jusqu'à présent, vous comprenez que les conteneurs fournissent des processus isolés pour chaque composant de votre application. Chaque composant - une interface React, une API Python et une base de données Postgres - s'exécute dans son propre environnement de bac à sable, complètement isolé de tout le reste sur votre machine hôte. Cette isolation est excellente pour la sécurité et la gestion des dépendances, mais cela signifie également que vous ne pouvez pas y accéder directement. Par exemple, vous ne pouvez pas accéder à l'application web dans votre navigateur.

C'est là que la publication de ports entre en jeu.

Publication de ports

La publication d'un port offre la possibilité de percer un peu l'isolation réseau en mettant en place une règle de redirection. Par exemple, vous pouvez indiquer que les requêtes sur le port 8080 de votre hôte doivent être redirigées vers le port 80 du conteneur. La publication de ports se produit lors de la création du conteneur à l'aide de l'indicateur -p (ou --publish) avec docker run. La syntaxe est la suivante :

$ docker run -d -p HOST_PORT:CONTAINER_PORT nginx
  • HOST_PORT: Le numéro de port sur votre machine hôte où vous souhaitez recevoir du trafic
  • CONTAINER_PORT: Le numéro de port dans le conteneur qui écoute les connexions

Par exemple, pour publier le port 80 du conteneur sur le port 8080 de l'hôte :

$ docker run -d -p 8080:80 nginx

Maintenant, tout trafic envoyé au port 8080 de votre machine hôte sera redirigé vers le port 80 dans le conteneur.

Important

Lorsqu'un port est publié, il est publié sur toutes les interfaces réseau par défaut. Cela signifie que tout trafic qui atteint votre machine peut accéder à l'application publiée. Soyez prudent lors de la publication de bases de données ou de toute information sensible. En savoir plus sur les ports publiés ici.

Publication sur des ports éphémères

Parfois, vous voudrez peut-être simplement publier le port sans vous soucier du port hôte utilisé. Dans ces cas, vous pouvez laisser Docker choisir le port pour vous. Pour ce faire, omettez simplement la configuration HOST_PORT.

Par exemple, la commande suivante publiera le port 80 du conteneur sur un port éphémère de l'hôte :

$ docker run -p 80 nginx

Une fois le conteneur en cours d'exécution, l'utilisation de docker ps vous montrera le port qui a été choisi :

docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                    NAMES
a527355c9c53   nginx         "/docker-entrypoint.…"   4 seconds ago    Up 3 seconds    0.0.0.0:54772->80/tcp    romantic_williamson

Dans cet exemple, l'application est exposée sur l'hôte au port 54772.

Publication de tous les ports

Lors de la création d'une image de conteneur, l'instruction EXPOSE est utilisée pour indiquer que l'application empaquetée utilisera le port spécifié. Ces ports ne sont pas publiés par défaut.

Avec l'indicateur -P ou --publish-all, vous pouvez publier automatiquement tous les ports exposés sur des ports éphémères. C'est très utile lorsque vous essayez d'éviter les conflits de ports dans les environnements de développement ou de test.

Par exemple, la commande suivante publiera tous les ports exposés configurés par l'image :

$ docker run -P nginx

Essayez-le

Dans ce guide pratique, vous apprendrez à publier des ports de conteneur à l'aide de la CLI et de Docker Compose pour déployer une application web.

Utiliser la CLI Docker

Dans cette étape, vous exécuterez un conteneur et publierez son port à l'aide de la CLI Docker.

  1. Téléchargez et installez Docker Desktop.

  2. Dans un terminal, exécutez la commande suivante pour démarrer un nouveau conteneur :

    $ docker run -d -p 8080:80 docker/welcome-to-docker
    

    Le premier 8080 fait référence au port de l'hôte. C'est le port de votre machine locale qui sera utilisé pour accéder à l'application s'exécutant à l'intérieur du conteneur. Le second 80 fait référence au port du conteneur. C'est le port sur lequel l'application à l'intérieur du conteneur écoute les connexions entrantes. Par conséquent, la commande lie le port 8080 de l'hôte au port 80 du système de conteneur.

  3. Vérifiez le port publié en accédant à la vue Conteneurs du tableau de bord de Docker Desktop.

    Une capture d'écran du tableau de bord de Docker Desktop montrant le port publié
  4. Ouvrez le site web en sélectionnant le lien dans la colonne Port(s) de votre conteneur ou en visitant http://localhost:8080 dans votre navigateur.

    Une capture d'écran de la page d'accueil du serveur web Nginx s'exécutant dans un conteneur

Utiliser Docker Compose

Cet exemple lancera la même application à l'aide de Docker Compose :

  1. Créez un nouveau répertoire et, à l'intérieur de ce répertoire, créez un fichier compose.yaml avec le contenu suivant :

    services:
      app:
        image: docker/welcome-to-docker
        ports:
          - 8080:80

    La configuration ports accepte quelques formes de syntaxe différentes pour la définition du port. Dans ce cas, vous utilisez la même HOST_PORT:CONTAINER_PORT utilisée dans la commande docker run.

  2. Ouvrez un terminal et accédez au répertoire que vous avez créé à l'étape précédente.

  3. Utilisez la commande docker compose up pour démarrer l'application.

  4. Ouvrez votre navigateur à l'adresse http://localhost:8080.

Ressources supplémentaires

Si vous souhaitez approfondir ce sujet, n'hésitez pas à consulter les ressources suivantes :

Prochaines étapes

Maintenant que vous comprenez comment publier et exposer des ports, vous êtes prêt à apprendre comment remplacer les valeurs par défaut du conteneur à l'aide de la commande docker run.