Docker para desarrolladores: imágenes, contenedores y Compose

DevOps2026-10-02TryQuickToolBox

Probablemente hayas oído hablar de Docker y de cómo puede simplificar tu flujo de trabajo de desarrollo. Pero cuando te encuentras por primera vez con términos como imágenes, contenedores y Docker Compose, puede resultar abrumador. Esta guía elimina el ruido y te muestra exactamente cómo usar Docker de forma eficaz en tus proyectos.

¿Qué es Docker y por qué debería importarte?

Docker es una plataforma que empaqueta tu aplicación y sus dependencias en una unidad estandarizada llamada contenedor. Los contenedores son ligeros, portables y están aislados entre sí. Resuelven el clásico problema de "funciona en mi máquina" asegurando que tu app se ejecute de la misma manera en todas partes.

A diferencia de las máquinas virtuales, los contenedores comparten el kernel del sistema operativo anfitrión, lo que los hace más rápidos de iniciar y más eficientes. Por eso Docker se ha convertido en un pilar de los pipelines modernos de desarrollo y despliegue.

Imágenes vs. contenedores: los bloques de construcción

Una imagen es una plantilla de solo lectura que contiene el código de tu aplicación, el runtime, las librerías y la configuración. Un contenedor es una instancia en ejecución de una imagen. Piensa en una imagen como una clase y en un contenedor como un objeto.

Crearás imágenes usando un Dockerfile. Aquí tienes un ejemplo sencillo para una app Node.js:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Cada línea del Dockerfile crea una capa. Las capas se almacenan en caché, por lo que las reconstrucciones son más rápidas cuando solo cambian los pasos posteriores.

Comandos comunes de Docker

Docker Compose: gestionar apps multi-contenedor

Las apps del mundo real a menudo necesitan más de un servicio: un servidor web, una base de datos, una caché. Docker Compose te permite definir y ejecutar aplicaciones multi-contenedor con un único archivo YAML.

Aquí tienes un docker-compose.yml para una app Node.js con PostgreSQL y Redis:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
      - REDIS_URL=redis://cache:6379
    depends_on:
      - db
      - cache
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
  cache:
    image: redis:7
volumes:
  pgdata:

Ejecuta docker compose up y todos los servicios se inician juntos. El depends_on asegura que la base de datos y la caché se inicien antes que el servicio web.

Comandos clave de Compose

Buenas prácticas para desarrollo

Cuándo usar Docker (y cuándo no)

Docker destaca cuando necesitas entornos consistentes entre equipos, gestión sencilla de dependencias o microservicios. Puede ser excesivo para sitios estáticos simples o scripts. Evalúa según la complejidad de tu proyecto y tus necesidades de despliegue.

FAQ

¿Cuál es la diferencia entre una imagen y un contenedor?

Una imagen es una plantilla estática; un contenedor es una instancia en ejecución de esa imagen. Puedes ejecutar múltiples contenedores desde la misma imagen.

¿Necesito Docker Compose para un solo contenedor?

No, para un solo contenedor puedes usar docker run. Compose es útil cuando tienes múltiples servicios que necesitan comunicarse.

¿Cómo persisto datos en Docker?

Usa volúmenes o bind mounts. Los volúmenes son gestionados por Docker y son ideales para bases de datos; los bind mounts mapean un directorio del host dentro del contenedor, útiles para desarrollo.

¿Listo para optimizar tus apps dockerizadas? Si trabajas con logs de Nginx dentro de contenedores, prueba nuestro Analizador de Logs de Nginx para parsear y analizar logs rápidamente.