# Usar servicios de proveedores





Docker Compose admite servicios de proveedores, los cuales permiten la integración con servicios cuyos ciclos de vida son gestionados por componentes de terceros en lugar de por el propio Compose.  
Esta característica te permite definir y utilizar servicios específicos de la plataforma sin necesidad de una configuración manual o una gestión directa del ciclo de vida.

## ¿Qué son los servicios de proveedores?

Los servicios de proveedores son un tipo especial de servicio en Compose que representa capacidades de la plataforma en lugar de contenedores.
Te permiten declarar dependencias sobre características específicas de la plataforma que tu aplicación necesita.

Al definir un servicio de proveedor en tu archivo de Compose, Compose trabaja con la plataforma para aprovisionar y configurar la capacidad solicitada, poniéndola a disposición de los servicios de tu aplicación.

## Usar servicios de proveedores

Para usar un servicio de proveedor en tu archivo de Compose, necesitas:

1. Definir un servicio con el atributo `provider`
2. Especificar el tipo (`type`) de proveedor que deseas utilizar
3. Configurar cualquier opción específica del proveedor
4. Declarar dependencias desde los servicios de tu aplicación hacia el servicio del proveedor

Aquí tienes un ejemplo básico:

```yaml
services:
  database:
    provider:
      type: awesomecloud
      options:
        type: mysql
        foo: bar
  app:
    image: myapp
    depends_on:
      - database
```

Observa el atributo dedicado `provider` en el servicio `database`.
Este atributo especifica que el servicio es gestionado por un proveedor y te permite definir opciones específicas para ese tipo de proveedor.

El atributo `depends_on` en el servicio `app` especifica que depende del servicio `database`.
Esto significa que el servicio `database` se iniciará antes que el servicio `app`, permitiendo que la información del proveedor se inyecte en el servicio `app`.

## Cómo funciona

Durante la ejecución del comando `docker compose up`, Compose identifica los servicios que dependen de proveedores y trabaja con ellos para aprovisionar las capacidades solicitadas. A continuación, el proveedor completa el modelo de Compose con información sobre cómo acceder al recurso aprovisionado.

Esta información se pasa a los servicios que declaran una dependencia del servicio del proveedor, normalmente a través de variables de entorno. La convención de nomenclatura para estas variables es:

```env
<<PROVIDER_SERVICE_NAME>>_<<VARIABLE_NAME>>
```

Por ejemplo, si tu servicio de proveedor se llama `database`, el servicio de tu aplicación podría recibir variables de entorno como:

- `DATABASE_URL` con la URL para acceder al recurso aprovisionado
- `DATABASE_TOKEN` con un token de autenticación
- Otras variables específicas del proveedor

Tu aplicación puede utilizar estas variables de entorno para interactuar con el recurso aprovisionado.

## Tipos de proveedores

El campo `type` en un servicio de proveedor hace referencia al nombre de ya sea:

1. A Docker CLI plugin (e.g., `docker-model`)
2. A binary available in the user's PATH
3. A path to the binary or script to execute

Cuando Compose encuentra un servicio de proveedor, busca un plugin o binario con el nombre especificado para gestionar el aprovisionamiento de la capacidad solicitada.

Por ejemplo, si especificas `type: model`, Compose buscará un plugin de la CLI de Docker llamado `docker-model` o un binario llamado `model` en el PATH.

```yaml
services:
  ai-runner:
    provider:
      type: model # Busca el plugin docker-model o el binario model
      options:
        model: ai/example-model
```

El plugin o binario es responsable de:

1. Interpretar las opciones proporcionadas en el servicio del proveedor
2. Aprovisionar la capacidad solicitada
3. Devolver información sobre cómo acceder al recurso aprovisionado

Esta información se pasa luego a los servicios dependientes como variables de entorno.

> [!TIP]
>
> Si estás trabajando con modelos de IA en Compose, utiliza en su lugar el [elemento de nivel superior `models`](/ai/compose/models-and-compose/).

## Ventajas de utilizar servicios de proveedores

El uso de servicios de proveedores en tus aplicaciones de Compose ofrece varias ventajas:

1. Configuración simplificada: no necesitas configurar ni gestionar manualmente las capacidades de la plataforma
2. Enfoque declarativo: puedes declarar todas las dependencias de tu aplicación en un solo lugar
3. Flujo de trabajo consistente: utilizas los mismos comandos de Compose para gestionar toda tu aplicación, incluyendo las capacidades de la plataforma

## Crear tu propio proveedor

Si deseas crear tu propio proveedor para extender Compose con capacidades personalizadas, puedes implementar un plugin de Compose que registre tipos de proveedores.

Para obtener información detallada sobre cómo crear e implementar tu propio proveedor, consulta la [documentación de extensiones de Compose (Compose Extensions)](https://github.com/docker/compose/blob/main/docs/extension.md).  
Esta guía explica el mecanismo de extensión que te permite añadir nuevos tipos de proveedores a Compose.

## Referencia

- [Documentación de Docker Model Runner](/ai/model-runner/)
- [Documentación de extensiones de Compose](https://github.com/docker/compose/blob/main/docs/extension.md)

