Docker Compose: balanceo de cargas automatizado

Clase 25 de 34Curso de Docker Avanzado

Resumen

Conecta varias piezas sin complicaciones: con Docker Compose como miniorquestador local, levantas un balanceo de cargas con nginx y múltiples servicios en minutos. Un único archivo docker-compose.yml centraliza puertos, redes y builds, ahorrando comandos y ofreciendo más control y personalización del despliegue.

¿Qué es Docker Compose y por qué acelera microservicios?

Docker Compose se ejecuta en local y es una excelente práctica para microservicios. No se limita a un contenedor: pueden ser veinticinco o más y se publican y organizan de forma coherente. Gracias a un archivo en YAML, defines qué despliegas y cómo, sin repetir configuraciones manuales. El resultado: menos fricción, más claridad y una sola línea para construir y levantar todo.

¿Cómo organiza múltiples contenedores y puertos?

  • Define un servicio proxy basado en nginx que expone los puertos necesarios.
  • Mantiene servicios de sitio uno, dos y tres sin puertos expuestos, atendidos por nginx en el proxy.
  • Ajusta el archivo nginx.conf para que el upstream apunte a sitio uno, dos y tres e incluya el puerto interno de cada contenedor.
  • Usa una red compartida para que proxy y sitios se comuniquen sin exponer más de lo necesario.

¿Cómo preparar carpetas y el archivo docker-compose.yml?

Primero organiza tu proyecto. Crea la carpeta Compose y copia las carpetas del ejercicio de balanceo de cargas (incluyendo el proxy y los sitios). Abre el archivo del proxy, nginx.conf, y actualiza el bloque de upstream para sitio uno, dos y tres, agregando el puerto de comunicación interna de cada contenedor. Luego, en la raíz, crea el archivo docker-compose.yml (nombre exacto) y define servicios, puertos y red.

  • Carpeta base: Compose.
  • Archivos clave: nginx.conf y docker-compose.yml.
  • Servicios: proxy, sitio uno, sitio dos, sitio tres.
  • Red compartida: una sola red para todos los servicios.

Ejemplo del bloque de nginx descrito:

# nginx.conf (fragmento)
upstream sitios {
    server sitio1:PUERTO;
    server sitio2:PUERTO;
    server sitio3:PUERTO;
}

Estructura del archivo en YAML con lo esencial que se mencionó:

version: "3"
services:
  proxy:
    build: ./proxy
    ports:
      - "PUERTO_HOST:PUERTO_CONTENEDOR"
    networks:
      - red_balance

  sitio1:
    build: ./sitio1
    networks:
      - red_balance

  sitio2:
    build: ./sitio2
    networks:
      - red_balance

  sitio3:
    build: ./sitio3
    networks:
      - red_balance

networks:
  red_balance: {}
  # nombre: red balance; define aquí el tipo de red si aplica.

Claves de aprendizaje y habilidades: - Crear y nombrar correctamente archivos: docker-compose.yml con nombre exacto. - Configurar services, ports, build y networks en YAML. - Editar nginx.conf para el balanceo de cargas entre múltiples backends. - Organizar carpetas y reutilizar componentes previos para acelerar el setup.

¿Cómo ejecutar y verificar con Docker Compose?

Desde la terminal, cambia a la carpeta Compose y ejecuta el comando que compila y levanta todos los servicios en una sola pasada. Observa los logs: cada contenedor aparece con un color distinto, facilitando la lectura.

  • Comando único para construir y desplegar.
docker-compose up --build
  • Verifica en el navegador: abre localhost:8080 y comprueba la rotación entre la primera, segunda y tercera versión de la página.
  • Beneficios directos: te ahorras muchos comandos manuales, centralizas la configuración en YAML y tienes más control sobre qué y cómo se despliega.

¿Te gustaría comentar cómo estructurarías más servicios o qué variables agregarías al YAML para tu caso?