Casos de Uso y Ejemplos Prácticos
Ejecutando un Servidor Web
Supongamos que tienes una aplicación web ejecutándose en un contenedor Docker que escucha en el puerto 80 dentro del contenedor. Para que la aplicación sea accesible desde la máquina host, puedes asignar el puerto 80 del contenedor a un puerto personalizado en la host, como 8080:
docker run -p 8080:80 my-web-app
Ahora, puedes acceder a la aplicación web visitando http://localhost:8080 en la máquina host.
Exponiendo un Servidor de Base de Datos
Si tienes un servidor de base de datos (por ejemplo, MySQL) ejecutándose en un contenedor Docker, puedes asignar el puerto de la base de datos del contenedor (por ejemplo, 3306) a un puerto personalizado en la host:
docker run -p 3306:3306 mysql
Esto permitirá que otras aplicaciones que se ejecuten en la máquina host se conecten al servidor de base de datos MySQL dentro del contenedor utilizando el puerto 3306 de la host.
Asignación de Múltiples Puertos
En un escenario más complejo, podrías tener una aplicación de múltiples capas donde diferentes componentes (por ejemplo, servidor web, servidor de aplicaciones, base de datos) se ejecutan en contenedores Docker separados. Puedes asignar múltiples puertos para exponer estos componentes:
docker run -p 8080:80 -p 8000:8000 -p 3306:3306 my-app
Esto asignará el puerto 8080 de la host al puerto 80 del contenedor (servidor web), el puerto 8000 de la host al puerto 8000 del contenedor (servidor de aplicaciones) y el puerto 3306 de la host al puerto 3306 del contenedor (servidor de base de datos).
Uso de Asignación de Puerto Aleatorio
Si no deseas especificar un puerto específico en la máquina host, puedes permitir que Docker asigne automáticamente un puerto disponible:
docker run -p 80 my-web-app
En este caso, Docker asignará el puerto 80 del contenedor a un puerto disponible en la máquina host. Puedes usar el comando docker ps para ver el puerto asignado.
Al comprender estos casos de uso y ejemplos prácticos, puedes aprovechar eficazmente las capacidades de asignación de puertos de Docker para exponer tus aplicaciones y servicios contenedorizados al mundo exterior, permitiendo una comunicación y acceso sin problemas a tus aplicaciones.