Volver al blog
Tecnología

Docker explicado: qué es y por qué deberías usarlo

ByteData Cloud18 de julio de 20263 min de lectura

Guía introductoria a Docker. Contenedores vs máquinas virtuales, imágenes, docker-compose, Dockerfile y casos prácticos para desarrollo y producción.

El problema que Docker resolvió

"En mi máquina funciona" era la frase más repetida en desarrollo de software. Docker eliminó ese problema permitiendo empaquetar una aplicación con todas sus dependencias en un contenedor portátil.

¿Qué es un contenedor?

Un contenedor es un entorno aislado que incluye tu aplicación y todo lo que necesita para ejecutarse: sistema operativo base mínimo, bibliotecas, dependencias, archivos de configuración. Es ligero porque comparte el kernel del host, a diferencia de una máquina virtual que virtualiza hardware completo.

**Máquina virtual**: Hypervisor → SO invitado completo → Bibliotecas → App. Pesa GBs.

**Contenedor**: Docker Engine → Contenedor (App + dependencias). Pesa MBs.

Conceptos clave

**Imagen**: Una plantilla de solo lectura con las instrucciones para crear un contenedor. Como un snapshot de sistema de archivos. Se crean con un Dockerfile.

**Dockerfile**: Un archivo de texto con instrucciones para construir una imagen:

FROM node:20-alpine

WORKDIR /app

COPY package*.json ./

RUN npm ci --production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

**docker-compose.yml**: Define múltiples servicios que trabajan juntos. Ejemplo típico: app Node.js + PostgreSQL + Redis + Nginx. Un solo comando levanta todo el stack.

¿Por qué usar Docker?

### En desarrollo

  • Entorno idéntico al de producción. Adiós "en mi máquina funciona".
  • Nuevo desarrollador: git clone + docker compose up. Listo en 5 minutos.
  • Pruebas de integración con servicios reales (PostgreSQL, Redis) sin instalarlos en tu máquina.
  • ### En producción

  • Despliegue consistente: la misma imagen que probaste en staging va a producción.
  • Rollback instantáneo: si algo falla, vuelves a la imagen anterior con un comando.
  • Escalabilidad: con Docker Swarm o Kubernetes, escalas réplicas de tu app según demanda.
  • Densidad: pones 10 contenedores en el mismo servidor donde antes ponías 2 VMs.
  • Casos de uso prácticos

    ### Base de datos desechable para desarrollo

    En vez de instalar PostgreSQL localmente:

    docker run -d --name pg-dev -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:16-alpine

    ### WordPress local con Docker Compose

    Levantas WordPress + MySQL en 30 segundos para probar plugins o temas sin riesgo.

    ### CI/CD con GitHub Actions + Docker

    Cada push a main construye la imagen, corre tests, y si pasan, despliega automáticamente en el VPS de producción.

    ### Microservicios

    Cada parte de tu sistema (API auth, API productos, procesador de pagos, worker de emails) corre en su propio contenedor, independiente y escalable.

    ¿Cuándo NO usar Docker?

  • Aplicación simple en hosting compartido (cPanel no soporta Docker)
  • No tienes conocimientos de Linux/terminal
  • Tu aplicación es monolítica y pequeña, con pocas dependencias externas
  • El cliente prefiere simplicidad sobre flexibilidad
  • Compartir