Docker Compose y orquestación | Nicolás Garzón
Texto
Copiar Compose
→ proyecto en un Engine
Orquestador
→ desired state
→ scheduler
→ varios nodos
→ reconciliación continuaLa diferencia no es el formato YAML. Es la responsabilidad operativa asumida por la plataforma.
Compose es excelente para:
desarrollo local;
integration tests;
demos;
laboratorios;
CI;
entornos efímeros;
producción pequeña single-host;
documentación ejecutable de services, networks y volumes.
construir o usar images;
crear containers;
conectar networks;
montar volumes;
declarar healthchecks;
aplicar configuración;
escalar algunas réplicas en un host;
administrar lifecycle del proyecto.
Compose habla con un Engine/contexto.
Texto
Copiar compose.yaml
→ daemon seleccionado
→ containers de ese daemonNo elige automáticamente entre diez servidores ni mueve un container cuando el servidor desaparece.
Texto
Copiar host falla
→ daemon inaccesible
→ todos los containers de ese host caen
→ volumes locales inaccesiblesrestart: always solo actúa si el daemon/host vuelve y puede iniciar el container. No reschedulea en otro nodo.
Un orquestador almacena una intención:
Texto
Copiar service api
replicas: 3
image: sha256:ATexto
Copiar actual replicas: 2
→ controller detecta diferencia
→ scheduler crea reemplazo
→ actual replicas: 3Compose ejecuta operaciones cuando invocas comandos; no mantiene un control plane distribuido reconciliando indefinidamente.
Un scheduler decide dónde ejecutar según:
CPU/memory disponible;
constraints;
affinities;
taints/policies;
arquitectura;
zonas;
devices/GPU;
storage;
prioridades.
Compose no administra capacidad entre hosts.
Ante fallo de nodo, un orquestador puede crear la réplica en otro nodo si:
existe capacidad;
la image está disponible;
storage puede adjuntarse o el workload es stateless;
networking/service discovery funcionan;
secrets/config están disponibles.
Rescheduling del proceso no garantiza recuperación de datos locales.
Compose ofrece DNS dentro de sus networks en un Engine.
identidad lógica del service;
routing entre nodos;
actualización de endpoints;
balanceo;
health;
políticas de red.
Overlay/networking de cluster añade MTU, cifrado, control plane y troubleshooting del underlay.
Orquestadores pueden coordinar:
máximo no disponible;
surge capacity;
orden de reemplazo;
readiness;
pausa/rollback;
historial.
Compose puede recrear services, pero no ofrece automáticamente toda la semántica de un rollout distribuido seguro.
Un orquestador/plataforma puede escalar por:
CPU/memory;
custom metrics;
queue depth;
schedules;
external events.
Esto requiere capacity planning y límites. Escalar API puede saturar database o proveedor externo.
Compose permite --scale, pero la decisión y distribución siguen siendo manuales y single-host.
Recrear un proceso no corrige:
bug determinista;
migration incompatible;
secret inválido;
dependency outage;
disk corruption;
falta de capacidad.
Puede producir crash loops. “Self-healing” significa reconciliar instancias, no reparar la aplicación.
En cluster necesitas una entrada que descubra réplicas y retire las no ready.
Texto
Copiar internet
→ ingress/load balancer
→ healthy replicas en varios nodosCompose single-host normalmente delega esto a Caddy, Nginx, Traefik u otro proxy que debes configurar y operar.
Compose puede montar archivos, pero un orquestador suele ofrecer recursos distribuidos con:
control de acceso;
entrega a nodos;
versionado;
integración con secret managers;
actualización.
La seguridad real sigue dependiendo del backend, identidad y rotación.
Este es el límite más importante.
Texto
Copiar réplica puede moverse
→ no depende de disk localTexto
Copiar réplica se mueve
→ necesita datos correctosUn orquestador no vuelve distribuido un volume local. Necesitas:
storage attachable;
replication del motor;
database administrada;
object storage;
operador/controlador especializado.
Son posibles, pero requieren:
identity estable;
ordering;
persistent volumes;
backup;
failover;
quorum;
upgrades;
fencing.
Mover una database de Compose a Kubernetes no elimina trabajo de DBA; cambia el mecanismo.
Un cluster puede ofrecer:
namespaces/proyectos;
quotas;
network policies;
RBAC;
admission policies;
workload identities;
audit logs.
Esto importa cuando varios equipos comparten infraestructura. También aumenta complejidad del control plane.
instalación/servicio administrado;
upgrades;
networking;
observabilidad;
seguridad/RBAC;
manifests/templating;
debugging distribuido;
capacitación;
operación 24/7.
No adoptes un cluster para una sola API con downtime aceptable si un host automatizado cumple el SLO.
pérdida de host supera RTO;
necesitas varios nodos;
deploys sin downtime frecuentes;
muchas réplicas/services;
equipos comparten plataforma;
placement por zonas/GPU;
autoscaling;
políticas centralizadas;
recovery manual ya consume demasiado;
capacidad de un host es insuficiente.
uno o pocos services;
carga predecible;
downtime aceptable;
presupuesto bajo;
equipo pequeño;
recuperación single-host probada;
database externa administrada;
arquitectura simple.
Simple no significa improvisado. Compose productivo necesita monitoring, backup, TLS y automation.
No todo salto es Kubernetes.
plataforma PaaS de containers;
servicios serverless de containers;
múltiples VMs detrás de load balancer;
Docker Swarm u otro scheduler según contexto;
Nomad;
managed container services;
systemd + Engine + automation;
database/object storage administrados.
Evalúa capacidades y operación, no popularidad.
Una image OCI es ampliamente portable como artefacto. La aplicación completa no lo es automáticamente.
Compose depends_on vs readiness/controllers;
volume semantics;
secrets;
ingress;
health probes;
resource requests/limits;
rollout;
service identity;
jobs;
configs.
Migrar requiere traducir el modelo y probar comportamiento.
Ser stateless, configurable y observable facilita migración, pero aún existen:
network assumptions;
filesystem writes;
signals;
startup time;
platform APIs;
storage;
security contexts.
Diseñar contratos explícitos reduce acoplamiento.
API + worker;
PostgreSQL administrado;
object storage;
downtime de una hora aceptable;
backup y VM recreable.
Compose single-host puede ser adecuado.
miles de clientes;
SLO 99.95 %;
despliegues diarios;
múltiples zonas;
autoscaling;
equipo platform.
Un scheduler/plataforma multi-host probablemente está justificado.
externaliza state;
construye por digest;
añade health/readiness y graceful shutdown;
centraliza logs/metrics;
define resource limits;
elimina container_name y host assumptions;
prueba multi-replica;
traduce manifests;
despliega staging;
prueba failover y rollback.
No migres al cluster mientras la app todavía guarda sesiones en writable layer.
Texto
Copiar ¿qué ocurre en este host/container?
¿en qué nodo?;
¿qué scheduler decision?;
¿qué controller?;
¿qué endpoint?;
¿qué policy?;
¿qué volume attachment?;
¿qué underlay/overlay?;
¿qué versión del control plane?
La observabilidad debe crecer con la plataforma.
Multi-host solo mejora disponibilidad si distribuyes correctamente:
nodos;
racks/zonas;
load balancer;
storage;
control plane;
registry;
DNS.
Tres réplicas en la misma VM no son HA. Tres nodos en una sola zona tampoco cubren pérdida de zona.
Control planes y databases distribuidas requieren quorum. Añadir nodos sin entender consenso puede producir split brain o indisponibilidad.
El scheduler no sustituye la topología interna de stateful systems.
La curva operativa se convierte en riesgo.
No existe scheduling multi-host.
Datos locales divergen o se pierden.
Las semánticas son distintas.
Cluster ocioso puede costar más que el producto.
La simplicidad ya no compensa el riesgo.
Necesidad Compose single-host Orquestador Desarrollo local Excelente Excesivo Failover de nodo Manual Automatizable Multi-host scheduling No Sí Rolling distribuido Manual/limitado Integrado State local Host específico Requiere storage adicional Complejidad Baja/media Alta
Compose administra un proyecto en un Engine.
Un orquestador mantiene desired state en varios nodos.
Rescheduling no recupera datos locales automáticamente.
Multi-host añade disponibilidad y también complejidad distribuida.
Images son portables; la semántica completa de deployment no lo es.
La plataforma correcta es la mínima que satisface el SLO de forma sostenible.
Comprueba lo aprendido
¿Qué ocurre exactamente cuando se pierde un host Compose?
Diseña criterios para migrar un SaaS a un orquestador.
¿Por qué tres replicas no garantizan HA de una database?
Compara rolling update de Compose y de un scheduler.
Propón una migración gradual sin big bang.
Troubleshooting de Docker , donde cada incidente se descompone por capas en lugar de reiniciar componentes al azar.