Docker para Desarrolladores: Imágenes, Contenedores y Compose

DevOps2026-10-09TryQuickToolBox

Probablemente hayas oído hablar de Docker y los contenedores, pero quizás no tengas claro cómo encajan en tu flujo de trabajo diario. O tal vez hayas probado Docker, pero los conceptos de imágenes, contenedores y Compose te resulten confusos. Esta guía te llevará por los aspectos esenciales con ejemplos prácticos, para que puedas empezar a usar Docker de forma efectiva en tus proyectos.

¿Qué son las imágenes y los contenedores de Docker?

Piensa en una imagen de Docker como un plano para tu aplicación. Contiene todo lo necesario para ejecutar tu código: el sistema operativo, el runtime, las librerías y los archivos de tu aplicación. Las imágenes son inmutables y se construyen a partir de un Dockerfile.

Un contenedor es una instancia en ejecución de una imagen. Cuando inicias un contenedor, Docker crea un entorno aislado a partir de la imagen. Puedes ejecutar varios contenedores desde la misma imagen, cada uno con su propio estado.

Diferencias clave

Imagen Contenedor
Plantilla de solo lectura Instancia ejecutable
Construida desde Dockerfile Creado desde una imagen
Almacenada en un registro Se ejecuta en el host
Inmutable Efímero (se puede detener, iniciar, eliminar)

Construyendo tu primera imagen de Docker

Vamos a crear una aplicación simple de Node.js y contenerizarla. Comienza con un Dockerfile en la raíz de tu proyecto:

# Use an official Node.js runtime as a parent image
FROM node:18-alpine

# Set the working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm ci --only=production

# Copy the rest of the application code
COPY . .

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the app
CMD ["node", "server.js"]

Construye la imagen con:

docker build -t my-node-app .

Ejecuta un contenedor desde la imagen:

docker run -p 3000:3000 -d my-node-app

Tu aplicación ahora es accesible en http://localhost:3000.

Gestionando contenedores

Aquí tienes comandos esenciales para gestionar contenedores:

Simplificando aplicaciones multicontenedor con Docker Compose

Las aplicaciones reales a menudo necesitan múltiples servicios: un servidor web, una base de datos, una caché, etc. Gestionarlos con comandos individuales docker run es tedioso. Docker Compose te permite definir y ejecutar aplicaciones multicontenedor usando un archivo YAML.

Crea un docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Inicia todos los servicios con:

docker compose up -d

Detén y elimínalos con:

docker compose down

Mejores prácticas para el desarrollo

Preguntas frecuentes

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

Una imagen es una plantilla de solo lectura que define la aplicación y sus dependencias. Un contenedor es una instancia en ejecución de una imagen, con una capa de escritura encima.

¿Puedo usar Docker Compose en producción?

Docker Compose está diseñado principalmente para desarrollo y pruebas. Para producción, considera herramientas de orquestación como Kubernetes o Docker Swarm.

¿Cómo persisto datos en Docker?

Usa volúmenes o bind mounts. Los volúmenes son gestionados por Docker y son la forma preferida de persistir datos generados por los contenedores.

¿Listo para contenerizar tu aplicación? Si necesitas convertir documentación o guías a PDF para tu equipo, prueba nuestro convertidor de Word a PDF para compartir documentos pulidos.