En este tema compararemos dos de las herramientas más populares del ecosistema de contenedores: Docker Compose y Kubernetes. Es muy frecuente que quien empieza con Docker se pregunte cuál de las dos debe aprender o usar, e incluso si una sustituye a la otra. La respuesta corta es que resuelven problemas diferentes y, en muchos casos, son complementarias. En esta lección entenderás el propósito de cada una, cuándo elegir una u otra y cómo encajan juntas.

Objetivos de Aprendizaje

  • Comprender el propósito de Docker Compose y de Kubernetes.
  • Comparar ambas herramientas según caso de uso, escala, complejidad, orquestación y alta disponibilidad.
  • Saber cuándo conviene elegir cada una.
  • Entender cómo se complementan en un flujo de trabajo real.

¿Qué es Docker Compose?

Docker Compose es una herramienta para definir y ejecutar aplicaciones formadas por varios contenedores en un único host. Mediante un archivo docker-compose.yml, describes todos los servicios que componen tu aplicación (por ejemplo, una web, una base de datos y una caché) y los levantas con un solo comando.

Sus características principales son:

  • Está orientada al desarrollo local y a despliegues sencillos.
  • Funciona sobre una sola máquina.
  • Su configuración es declarativa y muy fácil de leer.
  • Permite arrancar todo el entorno con docker compose up.

Un ejemplo mínimo de archivo docker-compose.yml:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: ejemplo

En este archivo:

  • services: lista los componentes de la aplicación.
  • web: un servidor Nginx que expone el puerto 80.
  • db: una base de datos PostgreSQL con una contraseña de ejemplo.

Con docker compose up ambos contenedores se crean, se conectan en una red común y quedan listos para trabajar juntos.

¿Qué es Kubernetes?

Kubernetes (a menudo abreviado como K8s) es una plataforma de orquestación de contenedores diseñada para ejecutar aplicaciones a gran escala en clústeres de muchas máquinas. No solo arranca contenedores: gestiona automáticamente su ciclo de vida, su escalado, su recuperación ante fallos y su distribución entre servidores.

Sus características principales son:

  • Está orientada a producción a gran escala.
  • Funciona sobre un clúster de varios nodos (máquinas).
  • Reinicia contenedores que fallan y los redistribuye si un nodo cae.
  • Permite escalar automáticamente según la carga.
  • Su configuración es más potente pero también más compleja.

Un ejemplo muy simplificado de un manifiesto de Kubernetes que despliega una aplicación web:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:latest
          ports:
            - containerPort: 80

Desglose:

  • kind: Deployment: define un despliegue, que es la forma habitual de ejecutar aplicaciones sin estado.
  • replicas: 3: indica que queremos tres copias del contenedor ejecutándose simultáneamente para repartir la carga y tolerar fallos.
  • template: describe cómo debe ser cada contenedor (en este caso, un Nginx que escucha en el puerto 80).

Fíjate en la diferencia clave: con una sola línea (replicas: 3) le pedimos a Kubernetes que mantenga tres copias funcionando en todo momento. Si una falla, Kubernetes la vuelve a crear automáticamente.

Tabla Comparativa

Criterio Docker Compose Kubernetes
Caso de uso Desarrollo local, demos, despliegues pequeños. Producción a gran escala, sistemas críticos.
Escala Un solo host. Clúster de muchos nodos.
Complejidad Baja: fácil de aprender y usar. Alta: curva de aprendizaje pronunciada.
Orquestación Básica: arranca y conecta servicios. Avanzada: programación, balanceo, descubrimiento.
Alta disponibilidad Limitada: si el host cae, todo cae. Robusta: redistribuye cargas si un nodo falla.
Escalado Manual y dentro de un host. Automático y entre múltiples nodos.
Autorreparación No (más allá de políticas de reinicio simples). Sí: recrea contenedores y pods que fallan.

¿Cuándo Elegir Cada Uno?

Elige Docker Compose si...

  • Estás desarrollando en tu propio equipo y quieres levantar rápidamente una base de datos, una API y un frontend juntos.
  • Tu aplicación es pequeña y cabe holgadamente en un único servidor.
  • Quieres una herramienta sencilla, con un archivo de configuración corto y legible.
  • Necesitas montar un entorno de pruebas o demostración de forma ágil.

Elige Kubernetes si...

  • Vas a desplegar en producción una aplicación que debe estar disponible de forma continua.
  • Necesitas escalar automáticamente ante picos de tráfico.
  • Quieres tolerancia a fallos: que el sistema se recupere solo cuando algo falle.
  • Tienes muchos servicios repartidos en varias máquinas que requieren coordinación.

Cómo se Complementan

Aunque a veces se presentan como rivales, en la práctica Docker Compose y Kubernetes suelen usarse en fases distintas del mismo proyecto:

  1. Durante el desarrollo, el equipo usa Docker Compose para levantar toda la aplicación en local de forma rápida y reproducible.
  2. En producción, esa misma aplicación se despliega en Kubernetes para aprovechar el escalado y la alta disponibilidad.

Las imágenes de contenedor son el punto de unión: tanto Compose como Kubernetes ejecutan exactamente las mismas imágenes Docker. Lo que cambia es la herramienta que las orquesta. Esto significa que el trabajo de construir buenas imágenes (que aprendiste en módulos anteriores) es válido en ambos mundos.

Existen incluso herramientas que ayudan a traducir un docker-compose.yml a manifiestos de Kubernetes, facilitando ese salto del entorno local a producción.

Errores Comunes y Consejos

  • Creer que Kubernetes sustituye a Docker Compose: no es así. Para desarrollo local, Compose sigue siendo más rápido y cómodo.
  • Usar Kubernetes para todo: para una aplicación pequeña y un solo servidor, Kubernetes añade una complejidad innecesaria. No uses un martillo industrial para clavar una chincheta.
  • Confundir orquestación con ejecución: ejecutar un contenedor es fácil; orquestar decenas de ellos con tolerancia a fallos es lo difícil, y ahí es donde brilla Kubernetes.
  • Consejo: empieza siempre por Docker Compose para entender bien tu aplicación. Cuando tus necesidades de escala y disponibilidad lo justifiquen, da el salto a Kubernetes.

Ejercicios

Ejercicio 1

Para cada uno de estos escenarios, indica si usarías Docker Compose o Kubernetes y por qué:

  1. Un desarrollador quiere levantar en su portátil una API con su base de datos para programar.
  2. Una empresa necesita servir una tienda online con millones de visitas y sin caídas.
  3. Un equipo prepara una demo rápida para una reunión.

Ejercicio 2

Explica con tus propias palabras qué significa la línea replicas: 3 en un Deployment de Kubernetes y por qué esa funcionalidad es difícil de igualar con Docker Compose.

Ejercicio 3

Describe cómo Docker Compose y Kubernetes pueden complementarse dentro del ciclo de vida de un mismo proyecto.

Soluciones

Solución al Ejercicio 1

  1. Docker Compose: es un entorno de desarrollo local en un solo equipo; prioriza la sencillez y la rapidez.
  2. Kubernetes: requiere alta escala, escalado automático y alta disponibilidad sin caídas.
  3. Docker Compose: una demo rápida se beneficia de la simplicidad y velocidad de Compose.

Solución al Ejercicio 2

replicas: 3 indica a Kubernetes que debe mantener tres copias del contenedor ejecutándose en todo momento. Si una copia falla o el nodo donde corre se cae, Kubernetes crea automáticamente otra para volver a tener tres. Esto proporciona escalado y autorreparación, algo que Docker Compose no ofrece de forma nativa porque opera sobre un único host.

Solución al Ejercicio 3

Durante el desarrollo, el equipo usa Docker Compose para levantar toda la aplicación en local de forma sencilla. Cuando llega el momento de desplegar en producción, las mismas imágenes Docker se ejecutan en Kubernetes, que aporta escalado, balanceo de carga y tolerancia a fallos. Las imágenes de contenedor son el elemento común que permite pasar de un entorno a otro.

Conclusión

En esta lección hemos comparado Docker Compose y Kubernetes, entendiendo que no son competidores directos sino herramientas pensadas para problemas distintos: Compose destaca en el desarrollo local y los despliegues sencillos, mientras que Kubernetes domina la orquestación a gran escala con alta disponibilidad. También hemos visto cómo se complementan a lo largo del ciclo de vida de un proyecto. En la siguiente lección daremos un paso más práctico y conoceremos Docker Desktop, la aplicación que reúne todas estas piezas en un entorno integrado y fácil de usar.

© Copyright 2026. Todos los derechos reservados