database:
provider:
type: awesomecloud
options:
type: mysql
foo: bar
app:
image: myapp
depends_on:
- database
```
As Compose runs the application, the `awesomecloud` binary is used to manage the `database` service setup.
Dependent service `app` receives additional environment variables prefixed by the service name so it can access the resource.
For illustration, assuming `awesomecloud` execution produced variables `URL` and `API_KEY`, the `app` service
runs with environment variables `DATABASE_URL` and `DATABASE_API_KEY`.
As Compose stops the application, the `awesomecloud` binary is used to manage the `database` service tear down.
The mechanism used by Compose to delegate the service lifecycle to an external binary is described [here](https://github.com/docker/compose/tree/main/docs/extension.md).
For more information on using the `provider` attribute, see [Use provider services](/manuals/compose/how-tos/provider-services.md).
### `type`
`type` attribute is required. It defines the external component used by Compose to manage setup and tear down lifecycle
events.
### `options`
`options` are specific to the selected provider and not validated by the compose specification
### `pull_policy`
`pull_policy` defines the decisions Compose makes when it starts to pull images. Possible values are:
- `always`: Compose always pulls the image from the registry.
- `never`: Compose doesn't pull the image from a registry and relies on the platform cached image.
If there is no cached image, a failure is reported.
- `missing`: Compose pulls the image only if it's not available in the platform cache.
This is the default option if you are not also using the [Compose Build Specification](build.md).
`if_not_present` is considered an alias for this value for backward compatibility.
- `build`: Compose builds the image. Compose rebuilds the image if it's already present.
- `daily`: Compose checks the registry for image updates if the last pull took place more than 24 hours ago.
- `weekly`: Compose checks the registry for image updates if the last pull took place more than 7 days ago.
- `every_<duration>`: Compose checks the registry for image updates if the last pull took place before `<duration>`. Duration can be expressed in weeks (`w`), days (`d`), hours (`h`), minutes (`m`), seconds (`s`) or a combination of these.
```yaml
services:
test:
image: nginx
pull_policy: every_12h
```
### `read_only`
`read_only` configures the service container to be created with a read-only filesystem.
### `restart`
`restart` defines the policy that the platform applies on container termination.
- `no`: The default restart policy. It does not restart the container under any circumstances.
- `always`: The policy always restarts the container until its removal.
- `on-failure[:max-retries]`: The policy restarts the container if the exit code indicates an error.
Optionally, limit the number of restart retries the Docker daemon attempts.
- `unless-stopped`: The policy restarts the container irrespective of the exit code but stops
restarting when the service is stopped or removed.
```yml
restart: "no"
restart: always
restart: on-failure
restart: on-failure:3
restart: unless-stopped
```
You can find more detailed information on restart policies in the
[Restart Policies (--restart)](/reference/cli/docker/container/run.md#restart)
section of the Docker run reference page.
### `runtime`
`runtime` specifies which runtime to use for the service’s containers.
For example, `runtime` can be the name of [an implementation of OCI Runtime Spec](https://github.com/opencontainers/runtime-spec/blob/master/implementations.md), such as "runc".
```yml
web:
image: busybox:latest
command: true
runtime: runc
```
The default is `runc`. To use a different runtime, see [Alternative runtimes](/manuals/engine/daemon/alternative-runtimes.md).
### `scale`
`scale` specifies the default number of containers to deploy for this service.