Dockerfile vs Docker Compose
La guía definitiva para entender las diferencias y cuándo usar cada uno
Comparación Rápida
| Característica | Dockerfile | Docker Compose |
|---|---|---|
| ¿Qué es? | Receta para construir UNA imagen | Orquestador para ejecutar MÚLTIPLES contenedores |
| Extensión | Dockerfile |
docker-compose.yml |
| Formato | Texto plano con instrucciones | YAML (YAML Ain't Markup Language) |
| Comando principal | docker build -t nombre . |
docker-compose up -d |
| Propósito | Definir CÓMO se construye una aplicación | Definir CÓMO se EJECUTA una aplicación con dependencias |
| Construye imágenes | Sí | Sí (usa Dockerfiles) |
| Ejecuta contenedores | No | Sí |
| Define redes | No | Sí |
| Define volúmenes | No | Sí |
| Escala servicios | No | Sí |
Dockerfile
Es como un plano o receta que le dice a Docker cómo construir una imagen.
Ejemplo:
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
¿Qué define?
- Imagen base
- Archivos a copiar
- Comandos a ejecutar
- Cómo arranca la app
Cómo usarlo:
docker build -t mi-app .
docker run -p 8080:80 mi-app
Docker Compose
Es como un director de orquesta que le dice a Docker cómo ejecutar múltiples contenedores que trabajan juntos.
Ejemplo:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- redis
- db
redis:
image: redis:alpine
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: secret
¿Qué define?
- Qué contenedores ejecutar
- Cómo se conectan entre sí
- Puertos y volúmenes
- Orden de inicio
Cómo usarlo:
docker-compose up -d
docker-compose down
Analogías para entender mejor
Analogía de la Pizza
Dockerfile = La receta para hacer UNA masa de pizza
Docker Compose = El plan COMPLETO: masa + salsa + queso + horno + entrega
Analogía de la Construcción
Dockerfile = El plano de construcción de UNA casa
Docker Compose = El plano de un BARRIO COMPLETO (varias casas + calles + servicios)
¿Cuándo usar cada uno?
- Tienes UNA sola aplicación/servicio
- No necesitas bases de datos, cachés, etc.
- Ejemplo: Un script Python simple
- Tu app necesita base de datos
- Usas Redis, RabbitMQ, Nginx, etc.
- Tienes microservicios
- Necesitas que todo arranque en orden
Ejemplo Práctico: App Node.js + MongoDB
FROM node:18
WORKDIR /app
COPY package*.json .
RUN npm install
COPY . .
CMD ["node", "server.js"]
version: '3'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- mongodb
mongodb:
image: mongo:6
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
docker-compose up -d levantas la app Y la base de datos juntos, conectados automáticamente.
Conclusión Final
Dockerfile
= CÓMO construir UNA imagen
La "receta"Docker Compose
= CÓMO ejecutar MÚLTIPLES contenedores
El "robot de cocina"NO son competidores, son COMPLEMENTARIOS.
Docker Compose usa Dockerfiles para construir imágenes.