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:
- Escalado Vertical: Aumentar los recursos (CPU, memoria) de un solo contenedor.
- 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:
Este comando crea un servicio llamado webapp
con una réplica. Para escalar este servicio a 3 réplicas, usamos:
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:
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:
Ejercicio Práctico
Ejercicio 1: Escalado y Balanceo de Carga
- Crear un archivo
docker-compose.yml
para una aplicación web simple utilizando Nginx. - Desplegar la aplicación utilizando Docker Swarm.
- Escalar la aplicación a 5 réplicas.
- Verificar el balanceo de carga accediendo a la aplicación desde un navegador y observando cómo se distribuye el tráfico.
Solución
-
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
-
Desplegar la aplicación:
docker stack deploy -c docker-compose.yml webapp
-
Escalar la aplicación a 5 réplicas:
docker service scale webapp_web=5
-
Verificar el balanceo de carga accediendo a
http://localhost
en un navegador y refrescando la página varias veces. Puedes usar herramientas comocurl
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.
Docker: De Principiante a Avanzado
Módulo 1: Introducción a Docker
- ¿Qué es Docker?
- Instalando Docker
- Arquitectura de Docker
- Comandos Básicos de Docker
- Entendiendo las Imágenes de Docker
- Creando tu Primer Contenedor Docker
Módulo 2: Trabajando con Imágenes Docker
- Docker Hub y Repositorios
- Construyendo Imágenes Docker
- Conceptos Básicos de Dockerfile
- Gestionando Imágenes Docker
- Etiquetado y Publicación de Imágenes
Módulo 3: Contenedores Docker
- Ejecutando Contenedores
- Ciclo de Vida del Contenedor
- Gestionando Contenedores
- Redes en Docker
- Persistencia de Datos con Volúmenes
Módulo 4: Docker Compose
- Introducción a Docker Compose
- Definiendo Servicios en Docker Compose
- Comandos de Docker Compose
- Aplicaciones Multi-Contenedor
- Variables de Entorno en Docker Compose
Módulo 5: Conceptos Avanzados de Docker
- Profundización en Redes Docker
- Opciones de Almacenamiento Docker
- Mejores Prácticas de Seguridad en Docker
- Optimizando Imágenes Docker
- Registro y Monitoreo en Docker
Módulo 6: Docker en Producción
- CI/CD con Docker
- Orquestando Contenedores con Docker Swarm
- Introducción a Kubernetes
- Desplegando Contenedores Docker en Kubernetes
- Escalado y Balanceo de Carga