Docker para desarrolladores: imágenes, contenedores y Compose

DevOps2026-10-01TryQuickToolBox

Como desarrollador, probablemente hayas enfrentado la frustración de las inconsistencias entre entornos: "¡Funciona en mi máquina!" Docker resuelve esto empaquetando aplicaciones en contenedores. Esta guía explica las imágenes de Docker, los contenedores y Compose para ayudarte a construir, distribuir y ejecutar aplicaciones de forma consistente.

¿Qué es Docker?

Docker es una plataforma para desarrollar, distribuir y ejecutar aplicaciones en contenedores. Los contenedores son paquetes ligeros, autónomos y ejecutables que incluyen todo lo necesario para ejecutar software: código, runtime, herramientas del sistema, librerías y configuraciones.

Imágenes vs. Contenedores

Una imagen es una plantilla de solo lectura con instrucciones para crear un contenedor. Un contenedor es una instancia ejecutable de una imagen. Puedes crear múltiples contenedores a partir de la misma imagen, cada uno aislado de los demás.

Trabajar con imágenes

Las imágenes se construyen a partir de un Dockerfile, un archivo de texto con instrucciones. Aquí tienes un ejemplo simple de Node.js:

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

Construye la imagen con:

docker build -t my-app .

Lista las imágenes: docker images

Ejecutar contenedores

Inicia un contenedor a partir de una imagen:

docker run -d -p 3000:3000 --name my-container my-app

Esto ejecuta el contenedor en modo detached (-d), mapea el puerto 3000 y lo nombra my-container.

Lista los contenedores en ejecución: docker ps

Detén un contenedor: docker stop my-container

Elimina un contenedor: docker rm my-container

¿Por qué usar Docker Compose?

Cuando tu aplicación depende de múltiples servicios (base de datos, caché, etc.), gestionar contenedores individuales se vuelve tedioso. Docker Compose te permite definir y ejecutar aplicaciones multicontenedor usando un archivo YAML.

Ejemplo de archivo Compose

Crea docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Inicia todos los servicios: docker compose up -d

Detén y elimina: docker compose down

Buenas prácticas para desarrolladores

Chuleta de comandos comunes

ComandoDescripción
docker build -t name .Construir una imagen desde el Dockerfile
docker run -p host:container imageEjecutar un contenedor y mapear puertos
docker ps -aListar todos los contenedores
docker exec -it container bashAbrir una shell dentro de un contenedor en ejecución
docker compose upIniciar los servicios definidos en el archivo Compose
docker compose logs -fSeguir los logs de todos los servicios

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 crear muchos contenedores a partir de una sola imagen.

¿Cuándo debería usar Docker Compose?

Usa Compose cuando tu aplicación requiera múltiples servicios (por ejemplo, servidor web, base de datos, caché) que necesiten ejecutarse juntos. Simplifica la orquestación para desarrollo y pruebas.

¿Cómo persisto datos en Docker?

Usa volúmenes o bind mounts. Los volúmenes son gestionados por Docker y se almacenan en un área dedicada; los bind mounts se enlazan a un directorio del host. Ambos sobreviven a los reinicios de los contenedores.

¿Listo para optimizar tu flujo de trabajo con Docker? Prueba nuestro Analizador de Logs de Nginx para depurar los logs de tus contenedores rápidamente.