Exponer puertos en Dockerfiles
Al construir imágenes de Docker, puedes especificar los puertos que deben exponerse dentro del contenedor utilizando la instrucción EXPOSE
en el Dockerfile.
Sintaxis para exponer puertos
La instrucción EXPOSE
en un Dockerfile sigue esta sintaxis:
EXPOSE < port > [ < port > / < protocol > ...]
Aquí, <port>
representa el número de puerto, y el <protocol>
opcional especifica el protocolo, que puede ser tcp
(por defecto) o udp
.
Por ejemplo, para exponer el puerto 80 (HTTP) y el puerto 22 (SSH) en tu contenedor, utilizarías la siguiente instrucción EXPOSE
:
EXPOSE 80 22
Mapear puertos expuestos en tiempo de ejecución
Cuando ejecutas un contenedor basado en la imagen, puedes mapear los puertos expuestos a los puertos de la máquina host utilizando la bandera -p
o --publish
con el comando docker run
.
docker run -p <host-port>:<container-port> <image-name>
Por ejemplo, para mapear el puerto 80 del contenedor al puerto 8080 del host, utilizarías el siguiente comando:
docker run -p 8080:80 my-app
Esto permite a los clientes externos acceder al servicio que se ejecuta en el puerto 80 dentro del contenedor conectándose al puerto 8080 en la máquina host.
Exponer múltiples puertos
Puedes exponer múltiples puertos en un Dockerfile utilizando múltiples instrucciones EXPOSE
. Esto es útil cuando tu contenedor ejecuta múltiples servicios o aplicaciones que deben ser accesibles desde el host.
EXPOSE 80
EXPOSE 22
EXPOSE 3306
Al ejecutar el contenedor, puedes mapear cada uno de estos puertos expuestos a los puertos del host utilizando la bandera -p
o --publish
.
docker run -p 8080:80 -p 2222:22 -p 3306:3306 my-app
Siguiendo este enfoque, puedes asegurarte de que todos los puertos necesarios estén expuestos y sean accesibles desde la máquina host.