Dans Docker, exposer signifie marquer des informations et est un moyen d'expression de document ; exposer peut permettre aux développeurs de comprendre rapidement quels services sont ouverts par Image dans le fichier docker. Les ports ne peuvent pas être ouverts directement, ce qui facilite l'utilisation du personnel d'exploitation et de maintenance. Lorsque vous créez un conteneur, vous savez quels ports ouvrir. S'il n'y a pas de port d'exposition, les services entre conteneurs peuvent également accéder les uns aux autres.
L'environnement d'exploitation de ce tutoriel : système linux7.3, docker version 19.03, ordinateur Dell G3.
L'exposition dans le Dockerfile est une information de balise Vous ne pouvez pas ouvrir directement le port, ce qui est pratique pour le personnel d'exploitation et de maintenance de savoir quels ports ouvrir lors de l'utilisation du conteneur. Lors de l'utilisation de docker run -itd -P xxx:xxx , capital -P mappera le port défini à l'aide de EXPOSE dans le fichier Dockerfile, et il n'est pas nécessaire de -p: ce formulaire manuellement.
EXPOSE n'est qu'un moyen d'expression du document. Dans le fichier docker, les développeurs peuvent rapidement comprendre quels services sont ouverts par Image. Cela n'a aucune signification pratique. S'il n'y a pas de port EXPOSE, les services entre conteneurs peuvent également accéder les uns aux autres.
La différence entre exposer et publier (run -p) dans Docker
L'enregistrement principal ici est un petit doute que j'ai découvert récemment en utilisant Docker. Pour résumer, voici :
Dans docker, quelles sont les différences et les connexions entre l'interface exposée docker run -p lorsque la ligne de commande est démarrée et l'interface exposée dans le fichier docker.
La description spécifique est la suivante :
Par exemple, j'expose d'abord un port 8080 dans le fichier Docker
EXPOSE 8080
Ensuite, je construis cette image pour une utilisation ultérieure
docker build -t myimage - Dockerfile
Ensuite, j'utilise docker run pour démarrer un conteneur de this image Exemple, et publier un port
docker container run -d -p 8080 myimage
Voici une question que j'ai mentionnée Depuis que j'ai déclaré le port Expose 8080 dans le Dockerfile, pourquoi dois-je encore publier le port (-p). Quelle est la différence et le lien entre les deux ? Puis-je directement
docker container run -d myimage
? Dans ce cas, y a-t-il des ports exposés ?
Après le test (le processus de test est omis, les amis intéressés peuvent le tester par eux-mêmes. En fait, il existe des différences essentielles entre les deux, et il existe également un certain degré de corrélation.
Je vais les énumérer ici. Quatre combinaisons
A, ni Expose ni run -p dans le Dockerfile
B, Expose uniquement le port dans le Dockerfile
C, et Expose dans le Dockerfile en même temps, et exécutez -p
D, exécutez uniquement - p
1------Pour le cas A, le service démarré dans ce conteneur n'est pas accessible par l'hôte hôte et le réseau externe, ni par le conteneur de liens, et ne peut être utilisé qu'à l'intérieur de ce conteneur
2-- ------Pour la situation B, le service démarré dans ce conteneur n'est pas accessible par le monde extérieur de Docker (hôte et autres hôtes), mais est accessible par des conteneurs d'autres liens via conteneur
lien
3- -------Pour le cas C, le cotnainer démarré est accessible par le monde extérieur de Docker, et est également accessible par le conteneur de liens
4--------------Pour le cas D, dans en fait, docker Une conversion implicite spéciale est effectuée, ce qui équivaut au cas C. Elle est accessible au monde extérieur et au conteneur du lien (c'est vrai dans ce cas, la raison est que docker pense que puisque vous devez ouvrez le port
Lorsqu'il s'agit du monde extérieur, d'autres conteneurs peuvent certainement y accéder, donc Docker effectue une exposition automatique
Apprentissage recommandé : "Tutoriel vidéo Docker"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!