Ir al contenido

Conceptos 03 - Buenas prácticas de redes en Docker Compose

Recomendaciones para diseñar la conectividad entre servicios de forma segura, predecible y mantenible. Recorra cada práctica para ver un ejemplo concreto.

  • 5 buenas prácticas
  • 4 elementos interactivos
  • Autoevaluación final

Concepto 1 de 5

Evite el acoplamiento a direcciones IP

Las direcciones IP de los contenedores no deben asumirse como estables. Las cadenas de conexión deben construirse a partir de nombres de servicio.

environment:
- DATABASE_URL=postgresql://user:pass@172.18.0.3:5432/mydb

Concepto 2 de 5

Publique únicamente los puertos estrictamente necesarios

Si un servicio solo será consumido por otros contenedores, no requiere la directiva ports. Exponer puertos sin necesidad incrementa la superficie de acceso.

db:
image: postgres:16
ports:
- "5432:5432" # accesible desde el host sin necesidad

Concepto 3 de 5

Aísle servicios internos mediante redes explícitas

La segmentación por redes permite controlar con mayor precisión qué servicios pueden comunicarse entre sí y cuáles deben permanecer aislados.

services:
web:
ports:
- "80:80"
networks:
- frontend
api:
networks:
- frontend
- backend
db:
networks:
- backend
networks:
frontend:
backend:

Elige un origen y un destino para comprobar qué comunicaciones permite esta configuración.

Concepto 4 de 5

No confunda la conectividad interna con el acceso desde el host

Que un servicio sea accesible por nombre dentro de la red de Docker no implica que pueda consumirse directamente desde la máquina anfitriona.

Funciona: contenedor → contenedor

# Desde web hacia db (misma red Docker)
postgresql://user:pass@db:5432/mydb ✓

No funciona sin ports: host → contenedor

# Desde psql en el host (sin puerto publicado)
psql -h localhost -p 5432 -U user mydb ✗

Activa y desactiva cada mecanismo por separado y observa a qué vía de acceso afecta.

  • Contenedor → contenedorweb → postgresql://…@db:5432/mydb
  • Host → contenedorpsql -h localhost -p 5432 -U user mydb

Concepto 5 de 5

Documente la topología de red de la aplicación

Incluir descripciones claras de servicios, redes y puertos publicados facilita la comprensión del sistema y mejora la incorporación de nuevos integrantes.

# README.md — sección de arquitectura
## Topología de red
Servicio | Red | Puerto publicado | Rol
----------|-------------|------------------|------------------
web | frontend | 80 | Punto de entrada
api | front+back | — | Puente entre redes
db | backend | — | Almacenamiento
redis | backend | — | Caché
- frontend: accesible desde el host (web)
- backend: aislada, solo comunicación interna

Autoevaluación

Comprueba lo que aprendiste

Cuatro preguntas rápidas para verificar las ideas clave de la lectura. Cada respuesta incluye una explicación.

  1. 1¿Cuál es la forma recomendada de apuntar a la base de datos en una cadena de conexión?
  2. 2Un servicio solo es consumido por otros contenedores de la misma red. ¿Necesita la directiva ports?
  3. 3db está en la red de web, pero no publica puertos. ¿Qué ocurre con psql -h localhost -p 5432 ejecutado desde el host?
  4. 4Con redes frontend y backend, ¿qué servicio puede comunicarse tanto con web como con db?

0/4 respuestas correctas