Utiliser Dockerfile pour exposer les ports

Using Dockerfile Expose Ports



Il est vraiment facile de créer une image Docker personnalisée à partir d'images Docker existantes en utilisant Dockerfile . Habituellement, les gens utilisent une image de base minimale telle que alpin ou ubuntu/debian Dans ce but. Supposons que vous souhaitiez créer une image Docker personnalisée de votre application Web préférée écrite en NodeJS. L'application fonctionnera sur le port 8080 . Par défaut, vous ne pourrez pas accéder à l'application Web sur le port 8080 depuis votre machine hôte. Vous devrez dire à Docker que vous souhaitez exposer ou ouvrir le port 8080 pour pouvoir y accéder depuis votre machine hôte.

Dans cet article, je vais vous montrer comment exposer les ports en utilisant Dockerfile avec un exemple du monde réel. Commençons.







Tout d'abord, nous devons créer un répertoire de projet. Dans ce répertoire, vous devez conserver tous les fichiers du projet et un Dockerfile .



Exécutez la commande suivante pour créer un répertoire de projet monapplication/ dans le répertoire HOME de vos utilisateurs et accédez-y :



$mkdir~/monapplication&& CD~/monapplication

Préparation de l'application Web :

Créez maintenant un répertoire src/ à l'intérieur de ~/monapplication/ répertoire avec la commande suivante :

$mkdirsrc

Dans le src/ répertoire, tout le code source de mon application NodeJS sera conservé.

je vais juste créer un simple app.js fichier dans le src/ répertoire et exécutez un simple serveur Web sur le port 8080 juste pour démonstration.

Les src/app.js fichier contient les lignes de codes suivantes :

Écriture de Dockerfile et exposition des ports :

Créez maintenant un Dockerfile dans le ~/monapplication répertoire avec la commande suivante :

$toucherDockerfile

Tapez maintenant les lignes suivantes dans le Dockerfile et enregistrez-le. Je discuterai de la signification de ces lignes plus tard.

Ici, DE l'alpin : 3,8 signifie, utilisez le alpin : 3,8 Image Docker comme base pour la nouvelle image que nous allons construire à partir de cela Dockerfile .

Exécuter la mise à jour apk signifie, exécutez le mise à jour apk commande dans l'image Docker de base alpin : 3,8 .

RUN apk add –no-cache nodejs signifie, exécutez le apk ajouter pour installer le langage de programmation NodeJS dans le alpin : 3,8 Image de base de Docker.

COPIER ./src /app signifie copier tous les fichiers du ~/monapplication/src répertoire vers le /application répertoire de la nouvelle image Docker que nous allons construire en utilisant le Dockerfile .

CMD [/usr/bin/node, /app/app.js] signifie, exécutez le /app/app.js fichier du nouveau conteneur en utilisant nœud binaire situé dans /usr/bin/node .

Enfin, à EXPOSE 8080/tcp signifie, exposer ou ouvrir le port TCP 8080 à l'ordinateur hôte.

Création d'une image Docker personnalisée à l'aide de Dockerfile :

Créons maintenant une image Docker personnalisée nœud-alpin:v1 en utilisant le Dockerfile que nous venons de créer.

Assurez-vous d'abord que vous êtes dans le ~/monapplication/ répertoire, puis exécutez la commande suivante pour créer votre image Docker personnalisée nœud-alpin:v1 :

$construction de docker-tnœud-alpin:v1 .

Comme vous pouvez le voir, l'image Docker personnalisée nœud-alpin:v1 est en cours de création. L'image et les packages Docker de base requis sont extraits d'Internet.

Comme vous pouvez le voir, l'image Docker personnalisée nœud-alpin:v1 est créé avec succès.

Test de l'image Docker personnalisée :

Nous pouvons maintenant tester l'image Docker personnalisée nœud-alpin:v1 très facilement. Tout ce que nous avons à faire est de créer un conteneur à partir de nœud-alpin:v1 image.

Exécutez la commande suivante pour créer un conteneur Docker www du nœud-alpin:v1 Image Docker :

$course de docker-ré -ce --Nomwww alpine-noeud:v1

Le conteneur www est créé.

Maintenant, découvrons l'adresse IP du www Conteneur Docker avec la commande suivante :

$docker inspecter www| saisirAdresse

Comme vous pouvez le voir, dans mon cas, l'adresse IP est 172.17.0.3 . Ainsi, l'application NodeJS que j'ai écrite devrait être accessible depuis le navigateur Web au port 8080 de cette adresse IP.

Voila ! je peux accéder au port 8080 de mon www Conteneur Docker.

C'est essentiellement ainsi que vous exposez certains ports dans vos images Docker personnalisées que vous allez créer à l'aide Dockerfile .

Exposition des ports TCP et UDP à l'aide de Dockerfile :

Dans la section précédente de cet article, je vous ai montré comment exposer un port TCP à l'aide d'un Dockerfile .

Vous pouvez facilement exposer un port TCP (disons un port TCP 53 ) dans ton Dockerfile avec la ligne suivante :

EXPOSER53/tcp

Vous pouvez également exposer un port UDP (disons un port UDP 53 ) avec la ligne suivante dans votre Dockerfile :

EXPOSER53/UDP

Vous pouvez exposer les ports TCP et UDP en même temps avec les lignes suivantes dans votre Dockerfile :

EXPOSER53/tcp
EXPOSER53/UDP

Si vous ne spécifiez pas le protocole (TCP ou UDP) à utiliser, TCP est utilisé par défaut. Par exemple, si vous écrivez la ligne suivante dans votre Dockerfile :

EXPOSER53

Ensuite, Docker supposera que vous souhaitez utiliser le port TCP 53.

Exposition de plusieurs ports à l'aide de Dockerfile :

Supposons que vous souhaitiez créer une image Docker de pile MEAN personnalisée. Dans ce cas, vous exécuterez un serveur HTTP sur un port (disons le port TCP 80 ou 8080), un serveur FTP qui s'exécute sur le port TCP 21, un serveur de base de données SQL (disons MySQL) qui s'exécute sur le port TCP 3306, ou un serveur de base de données NoSQL (disons MongoDB) qui tourne sur le port TCP 27017 ou 27018, un serveur SSH qui tourne sur le port TCP 22. Ça fait beaucoup de ports !

La bonne nouvelle est ; vous pouvez exposer autant de ports que nécessaire sur votre image Docker personnalisée créée à l'aide Dockerfile .

Les ports de l'exemple ci-dessus peuvent être exposés avec les lignes suivantes dans votre Dockerfile :

EXPOSER80/tcp
EXPOSER8080/tcp
EXPOSERvingt-et-un/tcp
EXPOSER22/tcp
EXPOSER3306/tcp
EXPOSER27017/tcp
EXPOSER27018/tcp

Si vous le souhaitez, vous pouvez laisser la spécification du protocole car Docker utilise TCP par défaut et faire la même chose avec les lignes suivantes dans votre Dockerfile :

EXPOSER80
EXPOSER8080
EXPOSERvingt-et-un
EXPOSER22
EXPOSER3306
EXPOSER27017
EXPOSER27018

Si vous en avez besoin, vous pouvez mélanger les ports TCP et UDP dans votre Dockerfile . Par exemple, si vous exécutez un serveur DNS (qui s'exécute sur le port UDP 53), avec l'exemple ci-dessus, vous ajouterez les lignes suivantes à votre Dockerfile .

EXPOSER80
EXPOSER8080
EXPOSERvingt-et-un
EXPOSER22
EXPOSER53/UDP
EXPOSER3306
EXPOSER27017
EXPOSER27018

C'est ainsi que vous exposez les ports en utilisant Dockerfile . En apprendre davantage sur Dockerfile et exposer les ports en utilisant Dockerfile , lis le Dockerfile guide de référence sur https://docs.docker.com/engine/reference/builder/#expose

Merci d'avoir lu cet article.