Exponer múltiples puertos en un contenedor Docker
- Crear una aplicación NGINX
- Crear un archivo Docker
- Construir una imagen
- Ejecute un contenedor Docker con múltiples puertos
- Prueba de los puertos
- Conclusión
En Internet se llevan a cabo diferentes tipos de comunicaciones, y las más comunes incluyen la transferencia de archivos, el envío de correos electrónicos y el servicio de páginas web. Para que esta comunicación sea posible, aprovechamos los números de puerto que ayudan a identificar el tipo de comunicación.
Por ejemplo, el Protocolo de transferencia de archivos usa los puertos 20 y 21, el Protocolo simple de transferencia de correo usa el 25 y el Protocolo de transferencia de hipertexto usa el 25.
De manera similar, los contenedores Docker usan puertos para permitir la comunicación entre diferentes dispositivos en la red mundial. En este tutorial, aprenderemos cómo exponer múltiples puertos en un contenedor Docker usando una aplicación Nginx.
Crear una aplicación NGINX
Abra WebStorm IDEA y seleccione Archivo>Nuevo>Proyecto
. En la ventana que se abre, elija Proyecto vacío y cambie el nombre del proyecto de sin título
a aplicación web
.
Finalmente, presione el botón llamado Crear para crear un proyecto vacío.
Tenga en cuenta que también podemos usar cualquier otro entorno de desarrollo, ya que no importa qué entorno de desarrollo se use. Dado que NGINX se usa para servir contenido estático, no necesitamos ningún otro archivo de configuración.
Una vez generado el proyecto, cree un archivo llamado index.js
en la carpeta web-app
y copie y pegue el siguiente código en el archivo.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Welcome to Nginx !</h1>
</body>
</html>
Este archivo contiene una página web simple con un encabezado para ayudarnos a probar la aplicación. Modifique el contenido HTML para mostrar cualquier contenido deseado.
Crear un archivo Docker
Cree un archivo llamado Dockerfile
en la carpeta aplicación web
y copie y pegue las siguientes instrucciones en el archivo.
FROM nginx:1.23.1-alpine
ADD . /usr/share/nginx/html
FROM
: establece la imagen base sobre la que crear nuestra imagen personalizada y, en nuestro caso, hemos utilizadoalpine
para extraer la versión ligera de NGINX.AÑADIR
- Copia los archivos y carpetas de la carpeta actual al sistema de archivos de nuestra imagen en/usr/share/nginx/html
.
Construir una imagen
Abra una nueva ventana de terminal en el entorno de desarrollo usando el atajo de teclado ALT+F12 y use el siguiente comando para crear una imagen con la etiqueta web-app:latest
.
~/WebstormProjects/web-app$ docker build --tag web-app:latest .
Este comando ejecuta nuestro Dockerfile
, y podemos ver las dos instrucciones realizadas secuencialmente, como se muestra a continuación.
=> [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c3740 0.2s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c3740 0.2s
=> CACHED [2/2] ADD . /usr/share/nginx/html
Ejecute un contenedor Docker con múltiples puertos
En la misma ventana de terminal utilizada para crear una imagen, use el siguiente comando para ejecutar un contenedor llamado web-app-prod
con los puertos 3000 y 5000 en el host que escucha el puerto 80 en el contenedor.
~/WebstormProjects/web-app$ docker run --name web-app-prod -d -p 3000:80 -p 5000:80 web-app:latest
Para exponer varios puertos en el contenedor, hemos usado dos indicadores -p
consecutivos que asignan dos puertos diferentes en el host para escuchar en el puerto 80 del contenedor.
Prueba de los puertos
Para verificar si nuestro contenedor funciona como se espera, abra cualquier navegador y envíe una solicitud a localhost:3000
(http://localhost:3000/) y localhost:5000
(http://localhost:5000/). Dado que los puertos escuchan el mismo contenedor, obtenemos la misma página de nuestra aplicación NGINX devuelta por las dos solicitudes, como se muestra a continuación.
Conclusión
Este tutorial nos ha enseñado cómo exponer múltiples puertos en un contenedor Docker aprovechando una aplicación NGINX. Tenga en cuenta que este es el método más común para exponer múltiples puertos, pero existen otros enfoques que podemos usar para obtener el mismo objetivo.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub