4.1 Conceptos básicos de la publicación de puertos
La publicación de puertos de contenedores en Docker permite que los servicios que se ejecutan dentro de los contenedores estén disponibles desde una red externa o desde el host. Es una parte importante de la configuración de aplicaciones de múltiples contenedores, ya que permite interactuar con servicios como servidores web, bases de datos y otras aplicaciones de red. En esta lección, vamos a ver cómo publicar puertos de contenedores y configurar el acceso a los servicios.
Conceptos básicos de la publicación de puertos
- Mapeo de puertos: correspondencia entre el puerto del host y el puerto del contenedor.
- Parámetro
-p/--publish
: se utiliza para indicar el mapeo de puertos al iniciar un contenedor. - Parámetro
-P/--publish-all
: asignación automática de puertos del host para todos los puertos exportados del contenedor.
Ejemplo de uso del parámetro -p
Al iniciar un contenedor, puedes usar la opción -p
para mapear un puerto del host a un puerto del contenedor. El formato del comando es:
docker run -d -p <host_port>:<container_port> <image>
Ejemplo 1: Publicación del puerto de un servidor web Nginx
Vamos a iniciar un contenedor con Nginx y publicar el puerto 80 del contenedor en el puerto 8080 del host.
Ahora Nginx estará disponible en http://localhost:8080.
docker run -d -p 8080:80 --name mynginx nginx
Ejemplo 2: Publicación de varios puertos
Puedes publicar múltiples puertos indicando varias opciones -p
.
En este ejemplo, Nginx estará disponible por HTTP en el puerto 8080 y por HTTPS en el puerto 8443.
docker run -d -p 8080:80 -p 8443:443 --name mynginx nginx
Ejemplo de uso del parámetro -P
El parámetro -P
publica automáticamente todos los puertos indicados en el Dockerfile o en la configuración del contenedor, en puertos aleatorios del host.
Ejemplo:
docker run -d -P --name mynginx nginx
Para averiguar qué puertos fueron asignados, usa el comando docker port
:
docker port mynginx
La salida será algo así:
80/tcp -> 0.0.0.0:32768
443/tcp -> 0.0.0.0:32769
4.2 Publicación de puertos en Docker Compose
Para asignar puertos en Docker Compose usa la directiva ports
en el archivo docker-compose.yml
.
Ejemplo del archivo docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
- "8443:443"
Ejecuta Docker Compose:
docker compose up -d
Ahora Nginx estará disponible en las direcciones http://localhost:8080 y https://localhost:8443.
4.3 Parámetros adicionales para publicar puertos
1. Restricción de la dirección IP
Podés limitar el acceso al puerto del contenedor especificando la dirección IP del host.
Ejemplo:
En este ejemplo, Nginx solo estará disponible desde el host local en la dirección http://127.0.0.1:8080.
docker run -d -p 127.0.0.1:8080:80 --name mynginx nginx
2. Uso de un rango de puertos
Podés especificar un rango de puertos para publicar.
Ejemplo:
docker run -d -p 8080-8081:80-81 --name mynginx nginx
Consejos prácticos:
- Publicar solo los puertos necesarios: Publicá solo los puertos que realmente sean necesarios para acceder a los servicios, para reducir posibles vulnerabilidades.
- Uso de firewall: Configurá el firewall para restringir el acceso a los puertos publicados solo desde direcciones IP confiables.
- Monitoreo y registro: Usá herramientas de monitoreo y registro para rastrear el acceso a los puertos publicados e identificar actividades sospechosas.
GO TO FULL VERSION