Constructor visual de docker-compose.yml con presets para stacks comunes
Presets
services: {}
También podrías necesitar
Docker Compose es el estándar para definir y ejecutar aplicaciones multi-contenedor en desarrollo y staging. Un archivo docker-compose.yml describe todos los servicios de tu aplicación (base de datos, backend, frontend, cache, message broker) y sus relaciones, permitiendo levantarlos todos con un solo comando: docker compose up. La estructura del YAML puede ser confusa la primera vez: la diferencia entre volumes en nivel de servicio (mount) y en nivel raíz (named volumes), cómo funciona depends_on con healthcheck, la sintaxis de los ports (HOST:CONTAINER), o cuándo usar restart: unless-stopped vs always. Esta herramienta elimina esa fricción con un builder visual: agregás servicios con un botón, configurás cada uno en un formulario, y el YAML se genera automáticamente. Los presets incluyen stacks completos validados: Node.js + PostgreSQL con variables de entorno pre-configuradas, Laravel + MySQL con las variables de entorno que espera Laravel (DB_HOST, DB_DATABASE, etc.), y Next.js + Redis con el puerto correcto del cliente. El YAML generado usa la especificación de Compose V2 (sin la clave 'version' obsoleta, compatible con Docker Compose v2.x y Docker Desktop). Descargás directamente el docker-compose.yml.
¿Qué versión de la especificación usa el YAML generado?
El YAML generado usa la especificación de Compose V2 sin la clave 'version' de nivel superior. Esta clave fue declarada obsoleta en Docker Compose v2.x y Docker Desktop — su omisión es la práctica recomendada actual. Si necesitás compatibilidad con versiones antiguas de Docker Compose (v1.x CLI), podés agregar 'version: "3.8"' al inicio del archivo, pero si usás Docker Desktop o docker compose (con espacio, V2) en cualquier plataforma moderna, no hace falta.
¿Cuál es la diferencia entre volumes en el servicio y volumes en la raíz?
Los volumes en el servicio definen los mounts: de dónde (host o named volume) a dónde (path en el contenedor). Los volumes en la raíz del compose declaran los named volumes que Docker gestiona. Un bind mount (./data:/var/lib/postgresql/data) monta una carpeta local. Un named volume (pgdata:/var/lib/postgresql/data) usa un volumen gestionado por Docker que persiste entre recreaciones del contenedor. Para bases de datos en desarrollo, los named volumes son más convenientes; para hot-reload de código, los bind mounts de la carpeta del proyecto son necesarios.
¿Cómo funciona depends_on?
depends_on define el orden de inicio de los contenedores — garantiza que el servicio dependiente solo arranque después de que el servicio del que depende esté corriendo. Sin embargo, 'corriendo' no significa 'listo para aceptar conexiones': una base de datos puede tardar unos segundos en inicializarse aunque el contenedor ya esté up. Para esperar a que el servicio esté realmente disponible, combiná depends_on con condition: service_healthy y definí un healthcheck en el servicio de base de datos. Los presets de esta herramienta incluyen esta configuración.
¿Debo commitear el docker-compose.yml al repositorio?
Sí, el docker-compose.yml para desarrollo debe commitearse. Las variables de entorno sensibles (contraseñas, API keys) no van en el YAML — van en un archivo .env que no se commitea. Docker Compose carga automáticamente el .env del directorio actual para substituir las variables ${VARIABLE} en el YAML. El patrón estándar es: docker-compose.yml (commiteado) + .env.example (commiteado, sin valores reales) + .env (gitignored, con valores reales).
¿Puedo usar este Compose en producción?
El YAML generado está optimizado para desarrollo. Para producción, hay diferencias importantes: en prod no usás bind mounts del código fuente (la imagen ya incluye el código), no exponés puertos de base de datos al host (solo la red interna del compose), usás secrets de Docker en lugar de variables de entorno directas para credenciales, y probablemente no usás restart: unless-stopped sino una orquestación más robusta (Kubernetes, ECS, Swarm). Este generador es un excelente punto de partida para el entorno de desarrollo.