Diferencia entre PORT y EXPOSE en Docker
Si eres nuevo en Docker o incluso si ya tienes experiencia, puede que te hayas topado con los comandos `PORT` y `EXPOSE`. Ambos comandos sirven para exponer los puertos en los que nuestra aplicación está escuchando, pero su funcionalidad es diferente. En este artículo hablaremos sobre las diferencias entre `PORT` y `EXPOSE` y cuándo debemos usar uno u otro.
¿Qué es `EXPOSE` en Docker?
El comando `EXPOSE` es utilizado para documentar los puertos en los que nuestra aplicación está escuchando dentro del contenedor. Sin embargo, no realiza ninguna acción para abrir o dirigir el puerto de forma automática. Es decir, simplemente se utiliza como una forma de documentar los puertos que necesita nuestra aplicación.
Veamos un ejemplo. Supongamos que tenemos una aplicación web corriendo en el puerto 3000 dentro del contenedor. Si usamos el comando `EXPOSE` en nuestro archivo Dockerfile:
```Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
```
Estamos indicando que nuestra aplicación necesita el puerto 3000 y lo estamos documentando mediante `EXPOSE`. Pero si no utilizamos el comando `PORT`, nadie fuera del contenedor podrá acceder a nuestra aplicación.
¿Qué es `PORT` en Docker?
El comando `PORT` en Docker se utiliza para direccionar el puerto del contenedor a un puerto en el host que lo está ejecutando. Es decir, nos permite indicar cómo queremos que se realice el mapeo entre los puertos del contenedor y los puertos del host.
Siguiendo el ejemplo anterior, si queremos que alguien pueda acceder a nuestra aplicación web desde fuera del contenedor, debemos usar el comando `PORT` en nuestro archivo Dockerfile:
```Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
# direccionamos el puerto 3000 del contenedor al puerto 5000 del host
# para que se pueda acceder a la aplicación desde fuera del contenedor
PORT 5000:3000
```
Con `PORT 5000:3000`, estamos indicando que el puerto 3000 dentro del contenedor debe ser redireccionado al puerto 5000 del host para permitir el acceso a la aplicación desde fuera del contenedor.
Resumen
La diferencia entre `EXPOSE` y `PORT` en Docker es que `EXPOSE` simplemente documenta los puertos que utiliza nuestra aplicación dentro del contenedor, mientras que `PORT` direcciona los puertos del contenedor a puertos en el host para permitir el acceso desde fuera del contenedor.
Es importante tener en cuenta que el comando `EXPOSE` es útil para documentar los puertos que necesita nuestra aplicación dentro del contenedor, pero no para el acceso a la aplicación desde fuera del contenedor. Para eso, debemos usar `PORT`.
Si aún no has utilizado el comando `PORT`, te invitamos a probarlo en tus próximos proyectos de Docker para que puedas permitir el acceso a tus aplicaciones desde fuera del contenedor. ¡No te arrepentirás!
Deja una respuesta