En esta sección, aprenderemos sobre el escalado y el balanceo de carga en Docker. Estos conceptos son cruciales para garantizar que nuestras aplicaciones puedan manejar un aumento en la carga de trabajo y distribuir el tráfico de manera eficiente.

Conceptos Clave

Escalado

El escalado se refiere al proceso de aumentar o disminuir la capacidad de una aplicación. Hay dos tipos principales de escalado:

  1. Escalado Vertical: Aumentar los recursos (CPU, memoria) de un solo contenedor.
  2. Escalado Horizontal: Aumentar el número de instancias de un contenedor.

Balanceo de Carga

El balanceo de carga distribuye el tráfico de red entre varias instancias de una aplicación para asegurar que ninguna instancia se sobrecargue.

Escalado Horizontal con Docker

Comandos Básicos

Para escalar una aplicación en Docker, utilizamos el comando docker service scale. Aquí hay un ejemplo básico:

docker service create --name webapp --replicas 1 -p 80:80 nginx

Este comando crea un servicio llamado webapp con una réplica. Para escalar este servicio a 3 réplicas, usamos:

docker service scale webapp=3

Ejemplo Práctico

Supongamos que tenemos una aplicación web simple que queremos escalar. Primero, creamos un archivo docker-compose.yml:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.5"
          memory: "512M"
      restart_policy:
        condition: on-failure

Para escalar esta aplicación a 3 réplicas, ejecutamos:

docker stack deploy -c docker-compose.yml webapp
docker service scale webapp_web=3

Balanceo de Carga con Docker

Docker Swarm incluye un balanceador de carga interno que distribuye el tráfico entre las réplicas de un servicio.

Configuración de Balanceo de Carga

El balanceo de carga se configura automáticamente cuando se crean múltiples réplicas de un servicio. Docker Swarm se encarga de distribuir el tráfico entrante entre las réplicas.

Ejemplo Práctico

Continuando con el ejemplo anterior, cuando escalamos el servicio webapp_web a 3 réplicas, Docker Swarm automáticamente balancea el tráfico entre estas réplicas.

Podemos verificar el estado de las réplicas con:

docker service ps webapp_web

Ejercicio Práctico

Ejercicio 1: Escalado y Balanceo de Carga

  1. Crear un archivo docker-compose.yml para una aplicación web simple utilizando Nginx.
  2. Desplegar la aplicación utilizando Docker Swarm.
  3. Escalar la aplicación a 5 réplicas.
  4. Verificar el balanceo de carga accediendo a la aplicación desde un navegador y observando cómo se distribuye el tráfico.

Solución

  1. Crear el archivo docker-compose.yml:

    version: '3'
    services:
      web:
        image: nginx
        ports:
          - "80:80"
        deploy:
          replicas: 1
          resources:
            limits:
              cpus: "0.5"
              memory: "512M"
          restart_policy:
            condition: on-failure
    
  2. Desplegar la aplicación:

    docker stack deploy -c docker-compose.yml webapp
    
  3. Escalar la aplicación a 5 réplicas:

    docker service scale webapp_web=5
    
  4. Verificar el balanceo de carga accediendo a http://localhost en un navegador y refrescando la página varias veces. Puedes usar herramientas como curl para observar cómo se distribuye el tráfico:

    for i in {1..10}; do curl -s http://localhost | grep "Welcome"; done
    

Conclusión

En esta sección, hemos aprendido sobre el escalado y el balanceo de carga en Docker. Estos conceptos son esenciales para manejar aplicaciones en producción, asegurando que puedan escalar según la demanda y distribuir el tráfico de manera eficiente. En el siguiente módulo, profundizaremos en el ecosistema y las herramientas de Docker, explorando cómo Docker se integra con otras tecnologías y herramientas.

© Copyright 2024. Todos los derechos reservados