# Usar Compose en producción


Cuando defines tu aplicación con Compose en desarrollo, puedes utilizar esta definición para ejecutarla en diferentes entornos, como CI, staging (pruebas) y producción.

La forma más fácil de desplegar una aplicación es ejecutarla en un único servidor, de manera similar a cómo ejecutarías tu entorno de desarrollo. Si deseas escalar tu aplicación, puedes ejecutar aplicaciones de Compose en un clúster de Swarm.

### Modifica tu archivo de Compose para producción

Es posible que necesites realizar cambios en la configuración de tu aplicación para que esté lista para producción. Estos cambios podrían incluir:

- Eliminar las vinculaciones de volúmenes (volume bindings) para el código de la aplicación, de modo que el código permanezca dentro del contenedor y no pueda modificarse desde el exterior.
- Realizar la vinculación a puertos diferentes en el host.
- Configurar las variables de entorno de manera diferente, como reducir la verbosidad de los registros (logging) o especificar configuraciones para servicios externos, como un servidor de correo electrónico.
- Especificar una política de reinicio como [`restart: always`](/reference/compose-file/services/#restart) para evitar tiempos de inactividad.
- Añadir servicios adicionales, como un agregador de registros (logs).

Por este motivo, considera definir un archivo de Compose adicional, por ejemplo, `compose.production.yaml`, con detalles de configuración específicos para producción. Este archivo de configuración solo necesita incluir los cambios que deseas realizar con respecto al archivo de Compose original. El archivo de Compose adicional se aplica sobre el `compose.yaml` original para crear una nueva configuración.

Una vez que tengas un segundo archivo de configuración, puedes utilizarlo con la opción `-f`:

```console
$ docker compose -f compose.yaml -f compose.production.yaml up -d
```

Consulta [Usar múltiples archivos de Compose](/compose/how-tos/production/multiple-compose-files/) para ver un ejemplo más completo y conocer otras opciones.

### Despliegue de cambios

Cuando realices cambios en el código de tu aplicación, recuerda volver a compilar la imagen y recrear los contenedores de tu aplicación. Para volver a desplegar un servicio llamado `web`, utiliza:

```console
$ docker compose build web
$ docker compose up --no-deps -d web
```

Este primer comando vuelve a compilar la imagen para `web` y luego detiene, destruye y recrea únicamente el servicio `web`. La bandera `--no-deps` evita que Compose recree también los servicios de los que depende `web`.

### Ejecución de Compose en un solo servidor

Puedes usar Compose para desplegar una aplicación en un host de Docker remoto configurando adecuadamente las variables de entorno `DOCKER_HOST`, `DOCKER_TLS_VERIFY` y `DOCKER_CERT_PATH`. Para obtener más información, consulta [Variables de entorno predefinidas](/compose/how-tos/production/environment-variables/envvars/).

Una vez que hayas configurado tus variables de entorno, todos los comandos habituales de `docker compose` funcionarán sin necesidad de configuración adicional.

## Siguientes pasos

- [Familiarizarse con el modelo de confianza de Compose](/compose/trust-model/)
- [Usar múltiples archivos de Compose](/compose/how-tos/production/multiple-compose-files/)

