DevOps Intermedio

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, sistema operativo base — en una unidad llamada contenedor.

El resultado: la aplicación funciona exactamente igual en la laptop del desarrollador, en el servidor de pruebas y en producción. Sin el 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, funciona en cualquier lado.

Contenedor vs Máquina Virtual

CaracterísticaMáquina VirtualContenedor Docker
PesoGigabytes (incluye SO completo)Megabytes (comparte el SO del host)
ArranqueMinutosSegundos
AislamientoTotal (hardware emulado)Proceso (comparte kernel)
PortabilidadLimitadaAlta
Uso típicoMúltiples SOs en un servidorMúltiples apps en el mismo SO

Conceptos clave

Dockerfile

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

FROM node:20
WORKDIR /app
COPY package.json .
RUN npm install
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 repositorio público de imágenes Docker. Como el “App Store” 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:15
    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 crea y corre contenedores. Kubernetes orquesta muchos contenedores a escala — los distribuye entre servidores, los reinicia si fallan, balancea carga entre ellos. Son complementarios: 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 Docker a escala

Recursos adicionales: