8.1 Comando docker compose scale
Escalar servicios — es el proceso de aumentar o disminuir el número de instancias de contenedores que ejecutan el mismo servicio para manejar la carga y garantizar la tolerancia a fallos de la aplicación. En Docker Compose, para escalar servicios se utiliza el comando docker compose scale
(en versiones antiguas) o el parámetro --scale
en las nuevas versiones.
Conceptos básicos del escalado:
- Escalabilidad: La capacidad de aumentar o reducir fácilmente el número de instancias del servicio según la carga actual.
- Tolerancia a fallos: Ejecutar varias instancias del servicio permite garantizar la tolerancia a fallos, ya que una falla en una instancia no detendrá todo el servicio.
- Balanceo de carga: Distribuir la carga entre varias instancias del servicio para optimizar el rendimiento.
Uso del comando docker compose scale
Sintaxis del comando:
docker compose scale SERVICE=NUM
Dónde:
- SERVICE: nombre del servicio que necesitas escalar.
- NUM: número de instancias que deben ejecutarse.
Ejemplo de uso:
Supongamos que tienes un archivo compose.yaml
con la definición del servicio web.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
Para ejecutar 3 instancias del servicio web, usa el comando:
docker compose scale web=3
Nota: Antes de ejecutar el comando docker compose scale
, asegúrate de que los servicios estén iniciados con el comando docker compose up
.
Uso del parámetro --scale
en versiones nuevas
En las nuevas versiones de Docker Compose, el comando docker compose scale
fue reemplazado por el parámetro --scale
, que se utiliza junto con el comando up
.
docker compose up --scale web=3
Este enfoque es preferible, ya que permite iniciar y escalar servicios simultáneamente.
8.2 Ejemplos prácticos
Ejemplo 1: Escalado de un servidor web
Crea un archivo compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
Inicia y escala el servicio a 3 instancias:
docker compose up --scale web=3
Ahora tendrás 3 instancias del servidor web Nginx funcionando en los puertos dentro del rango 80-90.
¡Importante!
Si el servicio se supone que escalará a varias instancias, es necesario especificar un rango de puertos, por ejemplo: "80-90:80"
. Esto "reservará" en la máquina host un rango de 10 puertos. Al agregar una réplica del servicio se le asignará un puerto del rango. Si no se hace esto, los puertos serán seleccionados aleatoriamente, y las réplicas no estarán disponibles.
Ejemplo 2: Escalado con base de datos
Crea un archivo compose.yaml
:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80-90:80"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
Inicia y escala el servicio web
a 4 instancias:
docker compose up --scale web=4
Ahora tendrás 4 instancias del servidor web Nginx funcionando con una base de datos PostgreSQL.
8.3 Gestión de servicios escalables
Después de escalar los servicios, puedes usar los comandos de Docker Compose para gestionar las instancias.
Ver los contenedores en ejecución
Usa el comando docker compose ps
para ver todos los contenedores en ejecución:
docker compose ps
Detener y eliminar servicios escalables
Para detener y eliminar todas las instancias del servicio, usa el comando docker compose down
:
docker compose down
Consejos y recomendaciones:
- Balanceo de carga: usa balanceadores de carga para distribuir el tráfico entre varias instancias del servicio. Por ejemplo, puedes usar Nginx o HAProxy para este propósito.
- Preservación de datos: asegúrate de que los datos generados por los servicios escalables se guarden en volúmenes o almacenamiento externo para prevenir la pérdida de datos al detener o eliminar contenedores.
- Monitoreo: utiliza herramientas de monitoreo como Prometheus o Grafana para seguir el rendimiento y el estado de los servicios escalables.
- Escalamiento automático: considera la posibilidad de escalar automáticamente los servicios en función de la carga utilizando orquestadores como Kubernetes o Docker Swarm.
GO TO FULL VERSION