# Retos y preguntas habituales


<!-- vale Docker.HeadingLength = NO -->

### ¿Debo mantener un archivo Compose separado para desarrollo, pruebas y staging?

No hace falta mantener archivos Compose totalmente separados para tus
entornos de desarrollo, pruebas y staging. Puedes definir todos tus
servicios en un solo archivo Compose (`compose.yaml`). Puedes usar perfiles para
agrupar configuraciones de servicios específicas de cada entorno (`dev`, `test`,
`staging`).

Cuando necesites levantar un entorno, puedes activar los perfiles
correspondientes. Por ejemplo, para configurar el entorno de desarrollo:

```console
$ docker compose --profile dev up
```

Este comando inicia solo los servicios asociados al perfil `dev`,
dejando el resto inactivos.

Para más información sobre el uso de perfiles, consulta [Usar perfiles con
Compose](/compose/how-tos/profiles/).

### ¿Cómo puedo hacer que el servicio de base de datos arranque antes que el servicio front-end?

Docker Compose garantiza que los servicios arranquen en un orden concreto con la
propiedad `depends_on`. Esto indica a Compose que inicie el servicio de base de datos antes
de intentar lanzar el servicio front-end. Es crucial porque
las aplicaciones suelen depender de que la base de datos esté lista para conexiones.

Sin embargo, `depends_on` solo garantiza el orden, no que la base de datos esté totalmente
inicializada. Para un enfoque más sólido, sobre todo si tu aplicación depende
de una base de datos preparada (p. ej., tras migraciones), plantéate los [health
checks](/reference/compose-file/services/#healthcheck). Así puedes
configurar el front-end para que espere hasta que la base de datos pase su health check
antes de arrancar. Eso garantiza que la base de datos no solo esté arriba, sino lista para
atender peticiones.

Para más información sobre el orden de inicio de tus servicios, consulta
[Controlar el orden de inicio y apagado en Compose](/compose/how-tos/startup-order/).

### ¿Puedo usar Compose para compilar una imagen Docker?

Sí, puedes usar Docker Compose para compilar imágenes Docker. Docker Compose es una
herramienta para definir y ejecutar aplicaciones multicontenedor. Aunque tu
aplicación no sea multicontenedor, Docker Compose puede facilitar su ejecución al definir
todas las opciones de `docker run` en un archivo.

Para usar Compose necesitas un archivo `compose.yaml`. En ese archivo puedes especificar
el contexto de compilación y el Dockerfile de cada servicio. Cuando ejecutes
`docker compose up --build`, Docker Compose compilará las imágenes de cada
servicio y luego iniciará los contenedores.

Para más información sobre la compilación de imágenes Docker con Compose, consulta la [especificación de compilación de
Compose](/compose/compose-file/build/).

### ¿Cuál es la diferencia entre Docker Compose y Dockerfile?

Un Dockerfile proporciona instrucciones para compilar una imagen de contenedor, mientras que un archivo
Compose define tus contenedores en ejecución. Con frecuencia, un archivo Compose hace referencia a un
Dockerfile para compilar una imagen que usará un servicio concreto.

### ¿Cuál es la diferencia entre los comandos `docker compose up` y `docker compose run`?

El comando `docker compose up` crea e inicia todos tus servicios. Es
ideal para lanzar tu entorno de desarrollo o ejecutar toda la
aplicación. El comando `docker compose run` se centra en servicios individuales.
Inicia un servicio indicado junto con sus dependencias, permitiéndote ejecutar
pruebas o tareas puntuales dentro de ese contenedor.

<div id="compose-lp-survey-anchor"></div>

