Guía Completa de Docker Compose
Deja de ejecutar comandos manuales de Docker para cada servicio.
Si ejecutas una aplicación moderna, es probable que tengas un frontend, un backend, una base de datos y una caché. Ejecutarlos uno por uno es lento y propenso a errores.
Docker Compose resuelve esto. Defines todo tu stack en un único archivo YAML y lo inicias todo con un solo comando.
Lo Básico
- Sin Compose: Ejecutas cuatro comandos distintos para cuatro contenedores.
- Con Compose: Ejecutas "docker compose up" y todo se inicia.
Conceptos Importantes
• Services: Cada servicio representa un contenedor. Puedes usar "build" para tu propio código o "image" para herramientas preconstruidas como PostgreSQL o Redis. • Port Mapping: Usa el formato HOST:CONTAINER. Esto mapea el puerto de tu computadora al puerto del contenedor. • Environment Variables: Usa "environment" para valores simples o "env_file" para mantener los secretos en un archivo .env separado. • Volumes: Usa volúmenes para mantener tus datos seguros. Sin volúmenes, los datos de tu base de datos desaparecen cuando el contenedor se detiene. • Networks: Compose crea una red automáticamente. Los contenedores se comunican entre sí utilizando sus nombres de servicio en lugar de localhost. • Depends_on: Esto establece el orden de inicio. Le indica a Docker que inicie la base de datos antes que el backend. Ten en cuenta que no espera a que la base de datos esté completamente lista.
Consejos para Entrevistas
- ¿Cuándo usar build vs image? Usa "build" para tu aplicación personalizada. Usa "image" para herramientas existentes de Docker Hub.
- ¿Cómo se comunican los contenedores? Utilizan los nombres de servicio como hostnames dentro de la red de Docker.
- ¿Cómo evitar la pérdida de datos? Usa siempre volúmenes con nombre para las bases de datos.
- ¿Cómo manejar secretos? Nunca los escribas directamente en el código. Usa un archivo .env.
Errores Comunes a Evitar
- Usar la etiqueta "latest": Esto causa actualizaciones inesperadas. Usa versiones específicas como "postgres:16".
- Usar localhost: Los contenedores no pueden verse entre sí a través de localhost. Usa el nombre del servicio.
- Sin healthchecks: Usa healthchecks para monitorear si tu servicio está realmente listo para funcionar.
Fuente: https://dev.to/adityaguptareal/docker-compose-complete-guide-1gac