DevOpsIntermedio

Docker

Plataforma de contenedores que permite empaquetar aplicaciones con todas sus dependencias para que corran de forma idéntica en cualquier entorno.

Pronunciación

/ˈdɒk.ər/
"dóker"
Escuchar en:Forvo Cambridge

Qué es

Docker es una plataforma que permite empaquetar una aplicación junto con todo lo que necesita para funcionar — código, librerías, configuraciones y los archivos base de un sistema operativo (sin el kernel) — en una imagen que se ejecuta como contenedor.

El resultado: la aplicación se comporta de forma consistente en la laptop del desarrollador, en el servidor de pruebas y en producción. Adiós a gran parte del clásico “funciona en mi máquina”.

El problema que resuelve

Antes de Docker, desplegar una aplicación era complejo porque:

  • La laptop del dev tenía Python 3.9, el servidor tenía Python 3.7
  • La librería X funcionaba en Linux pero no en Windows del mismo modo
  • Configurar un nuevo servidor tardaba horas o días

Docker encapsula todo esto. Si funciona en el contenedor, funcionará igual en cualquier host compatible (misma arquitectura de CPU y un kernel adecuado).

Contenedor vs Máquina Virtual

Característica Máquina Virtual Contenedor Docker
Peso Gigabytes (incluye SO completo) Megabytes (comparte el kernel del host)
Arranque Minutos Segundos o menos
Aislamiento Fuerte (hardware virtualizado, kernel propio) A nivel de proceso (comparte kernel)
Portabilidad Limitada Alta
Uso típico Múltiples SOs en un servidor Múltiples apps en el mismo SO

Conceptos clave

Dockerfile

El “plano” de la imagen. Define qué imagen base usar, qué instalar y cómo arrancar la aplicación.

FROM node:24-slim
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "server.js"]

Image (Imagen)

El resultado de “construir” un Dockerfile. Es inmutable — una plantilla.

Container (Contenedor)

Una instancia corriendo de una imagen. Puedes tener 10 contenedores del mismo servidor Node.js corriendo a la vez.

Docker Hub

El registro público de imágenes más conocido. Como una “tienda de apps” para contenedores — imágenes listas de MySQL, Nginx, Redis, etc.

Docker Compose

Para aplicaciones con múltiples servicios, Docker Compose define todo en un archivo:

services:
  web:
    build: .
    ports:
      - "3000:3000"
  database:
    image: postgres:17
    environment:
      POSTGRES_PASSWORD: secret

Un solo comando levanta toda la infraestructura: docker compose up.

Impacto en desarrollo moderno

Docker transformó cómo se construye software:

Para desarrolladores:

  • Entorno de desarrollo idéntico al de producción
  • Nuevos miembros del equipo productivos en minutos, no días
  • Pruebas de integración con bases de datos reales, no mocks

Para operaciones:

  • Despliegues predecibles y reversibles
  • Escalado horizontal simplificado
  • Múltiples versiones de la misma app corriendo en el mismo servidor

Para empresas:

  • Menor costo de infraestructura (más densidad por servidor)
  • Reducción de bugs causados por diferencias de entorno
  • Base para Kubernetes y arquitecturas cloud-native

Docker y Kubernetes

Docker construye imágenes y corre contenedores. Kubernetes orquesta muchos contenedores a escala — los distribuye entre servidores, los reinicia si fallan, balancea carga entre ellos. Son complementarios: las imágenes construidas con Docker siguen el estándar OCI y Kubernetes las ejecuta con runtimes como containerd. Docker es el ladrillo, Kubernetes es la construcción.

Términos relacionados

  • DevOps - Cultura y prácticas donde Docker es una herramienta central
  • CI/CD - Los pipelines de integración continua usan Docker para builds reproducibles
  • Microservices - Cada microservicio corre típicamente en su propio contenedor
  • Kubernetes - Orquestador de contenedores a escala

Recursos adicionales: