# Aprende a usar perfiles en Docker Compose


Con los perfiles puedes definir un conjunto de perfiles activos para que el modelo de tu aplicación de Compose se ajuste a diversos usos y entornos.

El elemento de nivel superior [services](/reference/compose-file/profiles/services/) admite un atributo `profiles` para definir una lista de perfiles con nombre. Los servicios sin un atributo `profiles` siempre están habilitados.

Compose ignora un servicio cuando ninguno de los `profiles` listados coincide con los activos, a menos que el servicio sea el objetivo explícito de un comando. En ese caso, su perfil se añade al conjunto de perfiles activos.

> [!NOTE]
>
> Todos los demás elementos de nivel superior no se ven afectados por los `profiles` y siempre están activos.

Las referencias a otros servicios (mediante `links`, `extends` o la sintaxis de recursos compartidos `service:xxx`) no habilitan automáticamente un componente que de otro modo habría sido ignorado por los perfiles activos. En su lugar, Compose devuelve un error.

## Ejemplo ilustrativo

```yaml
services:
  web:
    image: web_image

  test_lib:
    image: test_lib_image
    profiles:
      - test

  coverage_lib:
    image: coverage_lib_image
    depends_on:
      - test_lib
    profiles:
      - test

  debug_lib:
    image: debug_lib_image
    depends_on:
      - test_lib
    profiles:
      - debug
```

En el ejemplo anterior:

- Si el modelo de la aplicación de Compose se analiza sin ningún perfil habilitado, solo contendrá el servicio `web`.
- Si el perfil `test` está habilitado, el modelo contendrá los servicios `test_lib` y `coverage_lib`, además del servicio `web`, que siempre está habilitado.
- Si el perfil `debug` está habilitado, el modelo contendrá tanto el servicio `web` como `debug_lib`, pero no `test_lib` ni `coverage_lib`, por lo que el modelo no será válido respecto a la restricción `depends_on` de `debug_lib`.
- Si los perfiles `debug` y `test` están habilitados, el modelo contendrá todos los servicios: `web`, `test_lib`, `coverage_lib` y `debug_lib`.
- Si Compose se ejecuta especificando explícitamente `test_lib` para ejecutarse, tanto `test_lib` como el perfil `test` estarán activos, incluso si el perfil `test` no se ha habilitado.
- Si Compose se ejecuta especificando explícitamente `coverage_lib` para ejecutarse, el servicio `coverage_lib` y el perfil `test` estarán activos y `test_lib` se incluirá debido a la restricción `depends_on`.
- Si Compose se ejecuta especificando explícitamente `debug_lib` para ejecutarse, nuevamente el modelo no será válido con respecto a la restricción `depends_on` de `debug_lib`, ya que `debug_lib` y `test_lib` no tienen `profiles` comunes listados.
- Si Compose se ejecuta especificando explícitamente `debug_lib` para ejecutarse y el perfil `test` está habilitado, el perfil `debug` se habilitará automáticamente y el servicio `test_lib` se incluirá como una dependencia, iniciando ambos servicios (`debug_lib` y `test_lib`).

Aprende a usar `profiles` en [Docker Compose](/compose/how-tos/profiles/).

