El desarrollo local sin Docker suele acabar en "funciona en mi máquina". Docker Compose resuelve eso: todos trabajan exactamente con la misma versión de PostgreSQL, Redis, etc.
El setup mínimo: database, cache y tu aplicación
Un docker-compose.yml básico define: PostgreSQL con volumen para persistencia, Redis para caché, tu aplicación con dependencias. Eso es suficiente para empezar.
Los volúmenes aseguran que los datos persistan entre restarts. Las variables de entorno apuntan a los servicios que Docker crea.
- PostgreSQL: la fuente de verdad de datos.
- Redis: caché y sesiones.
- Tu app: apunta a localhost con puertos mapeados.
Volúmenes: persiste datos, no los pierdas
Un volumen Docker mapea una carpeta dentro del contenedor a una carpeta del host. Si PostgreSQL guarda datos en /var/lib/postgresql/data y mapeas un volumen ahí, los datos persisten incluso si detienes el contenedor.
Sin volúmenes, cada vez que levantas el container empiezas de cero.
- Define volúmenes para servicios con estado.
- Usa nombres en lugar de paths relativos.
- Documento qué limpia y qué persiste.
Networking: que los servicios se hablen entre sí
Docker Compose crea una red donde los servicios se comunican por nombre. Tu aplicación accede a PostgreSQL con host "postgres" (el nombre del servicio), no localhost.
Eso es lo que lo hace portable: cambias localhost por el nombre del servicio y funciona igual en producción.
- DATABASE_URL=postgres://user:pass@postgres:5432/dbname
- REDIS_URL=redis://redis:6379
- Nombres de servicios como hosts.
Debugging: qué mirar cuando algo no funciona
docker-compose logs muestra qué pasa en cada servicio. docker-compose ps muestra estado. docker-compose down y up es tu mejor amigo cuando todo se vuelve raro.
Cuando dudas, baja todo y levanta de nuevo. Docker Compose es lo suficientemente ligero como para que no sea drama.
Configuración para múltiples miembros del equipo
Mantén el docker-compose.yml en git. Usa .env.example documentando qué variables hay. En local, cada uno crea su .env desde el ejemplo.
Eso permite que el setup sea reproducible sin guardar secretos en git.