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 traficCONTAINER_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.
ImportantLorsqu'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.
-
Téléchargez et installez Docker Desktop.
-
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 second80
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 port8080
de l'hôte au port80
du système de conteneur. -
Vérifiez le port publié en accédant à la vue Conteneurs du tableau de bord de Docker Desktop.
-
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.
Utiliser Docker Compose
Cet exemple lancera la même application à l'aide de Docker Compose :
-
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êmeHOST_PORT:CONTAINER_PORT
utilisée dans la commandedocker run
. -
Ouvrez un terminal et accédez au répertoire que vous avez créé à l'étape précédente.
-
Utilisez la commande
docker compose up
pour démarrer l'application. -
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
.