En este artículo, le mostraré cómo exponer puertos usando Dockerfile con un ejemplo del mundo real. Empecemos.
Primero, tenemos que crear un directorio de proyecto. En este directorio, debe mantener todos los archivos del proyecto y un Dockerfile .
Ejecute el siguiente comando para crear un directorio de proyecto myapp / en el directorio HOME de sus usuarios y navegue hasta él:
$mkdir~/myapp&& cd~/myapp
Preparar la aplicación web:
Ahora crea un directorio src / dentro de ~ / myapp / directorio con el siguiente comando:
$mkdirsrc
En el src / directorio, se mantendrá todo el código fuente de mi aplicación NodeJS.
Solo crearé un simple app.js archivo en el src / directorio y ejecutar un servidor web simple en el puerto 8080 solo para demostración.
los src / app.js El archivo contiene las siguientes líneas de códigos:
Escribiendo Dockerfile y Exponiendo Puertos:
Ahora crea un Dockerfile en el ~ / myapp directorio con el siguiente comando:
$tocarDockerfile
Ahora escriba las siguientes líneas para Dockerfile y guárdalo. Discutiré lo que significan estas líneas más adelante.
Aquí, DESDE alpino: 3.8 significa, usa el alpino: 3.8 Imagen de Docker como base para la nueva imagen que construiremos a partir de este Dockerfile .
EJECUTAR actualización de apk significa, ejecutar el actualización de apk comando en la imagen base de Docker alpino: 3.8 .
EJECUTAR apk add –no-cache nodejs significa, ejecutar el apk agregar comando para instalar el lenguaje de programación NodeJS en el alpino: 3.8 Imagen base de Docker.
COPIA ./src / app significa, copiar todos los archivos del ~ / myapp / src directorio al / aplicación directorio de la nueva imagen de Docker que crearemos usando el Dockerfile .
CMD [/ usr / bin / node, /app/app.js] significa, ejecutar el /app/app.js archivo del nuevo contenedor usando nodo binario ubicado en / usr / bin / node .
Finalmente, para EXPONER 8080 / tcp significa, exponer o abrir el puerto TCP 8080 a la computadora host.
Creación de una imagen de Docker personalizada con Dockerfile:
Ahora creemos una imagen de Docker personalizada nodo alpino: v1 utilizando el Dockerfile que acabamos de crear.
Primero, asegúrate de estar en el ~ / myapp / directorio y luego ejecute el siguiente comando para crear su imagen personalizada de Docker nodo alpino: v1 :
$compilación de docker-tnodo alpino: v1.
Como puede ver, la imagen personalizada de Docker nodo alpino: v1 se está creando. La imagen y los paquetes base requeridos de Docker se están extrayendo de Internet.
Como puede ver, la imagen personalizada de Docker nodo alpino: v1 se crea correctamente.
Prueba de la imagen de Docker personalizada:
Ahora podemos probar la imagen personalizada de Docker. nodo alpino: v1 muy facilmente. Todo lo que tenemos que hacer es crear un contenedor a partir de nodo alpino: v1 imagen.
Ejecute el siguiente comando para crear un contenedor Docker www desde el nodo alpino: v1 Imagen de Docker:
$Docker ejecutar-D -eso --nombrewww alpine-node: v1
El contenedor www es creado.
Ahora averigüemos la dirección IP del www Contenedor de Docker con el siguiente comando:
$Docker inspeccionar www| sujeciónDirecciónComo puede ver, en mi caso, la dirección IP es 172.17.0.3 . Entonces, la aplicación NodeJS que escribí debería ser accesible desde el navegador web en el puerto 8080 de esta dirección IP.
¡Voila! Puedo acceder al puerto 8080 de mi www Contenedor Docker.
Básicamente, así es como expones ciertos puertos en tus imágenes personalizadas de Docker que crearás usando Dockerfile .
Exposición de puertos TCP y UDP mediante Dockerfile:
En la sección anterior de este artículo, le mostré cómo exponer un puerto TCP usando un Dockerfile .
Puede exponer fácilmente un puerto TCP (digamos puerto TCP 53 ) en tus Dockerfile con la siguiente línea:
EXPONER53/tcpTambién puede exponer un puerto UDP (digamos puerto UDP 53 ) con la siguiente línea en su Dockerfile :
EXPONER53/udpPuede exponer el puerto TCP y UDP al mismo tiempo con las siguientes líneas en su Dockerfile :
EXPONER53/tcpEXPONER53/udp
Si no especifica qué protocolo (TCP o UDP) utilizar, se utiliza TCP de forma predeterminada. Por ejemplo, si escribe la siguiente línea en su Dockerfile :
EXPONER53Luego, Docker asumirá que desea usar el puerto TCP 53.
Exposición de varios puertos mediante Dockerfile:
Supongamos que desea crear una imagen de Docker de pila MEAN personalizada. En este caso, estará ejecutando un servidor HTTP en algún puerto (digamos puerto TCP 80 o 8080), un servidor FTP que se ejecuta en el puerto TCP 21, un servidor de base de datos SQL (digamos MySQL) que se ejecuta en el puerto TCP 3306, o servidor de base de datos NoSQL (digamos MongoDB) que se ejecuta en el puerto TCP 27017 o 27018, un servidor SSH que se ejecuta en el puerto TCP 22. ¡Son muchos puertos!
La buena noticia es; puede exponer tantos puertos como necesite en su imagen personalizada de Docker creada usando Dockerfile .
Los puertos en el ejemplo anterior se pueden exponer con las siguientes líneas en su Dockerfile :
EXPONER80/tcpEXPONER8080/tcp
EXPONER21/tcp
EXPONER22/tcp
EXPONER3306/tcp
EXPONER27017/tcp
EXPONER27018/tcp
Si lo desea, puede dejar la especificación del protocolo ya que Docker usa TCP por defecto y hacer lo mismo con las siguientes líneas en su Dockerfile :
EXPONER80EXPONER8080
EXPONER21
EXPONER22
EXPONER3306
EXPONER27017
EXPONER27018
Si es necesario, puede mezclar puertos TCP y UDP en su Dockerfile . Por ejemplo, si ejecuta el servidor DNS (que se ejecuta en el puerto UDP 53), junto con el ejemplo anterior, agregaría las siguientes líneas a su Dockerfile .
EXPONER80EXPONER8080
EXPONER21
EXPONER22
EXPONER53/udp
EXPONER3306
EXPONER27017
EXPONER27018
Así es como expones los puertos usando Dockerfile . Para aprender más sobre Dockerfile y exponer puertos usando Dockerfile , leer el Dockerfile guía de referencia en https://docs.docker.com/engine/reference/builder/#expose
Gracias por leer este artículo.