marked with `service_healthy`. In the following example, `db` is expected to
be "healthy" before `web` is created.
- Compose removes services in dependency order. In the following
example, `web` is removed before `db` and `redis`.
```yml
services:
web:
build: .
depends_on:
db:
condition: service_healthy
restart: true
redis:
condition: service_started
redis:
image: redis
db:
image: postgres
```
Compose guarantees dependency services are started before
starting a dependent service.
Compose guarantees dependency services marked with
`service_healthy` are "healthy" before starting a dependent service.
### `deploy`
`deploy` specifies the configuration for the deployment and lifecycle of services, as defined [in the Compose Deploy Specification](deploy.md).
### `develop`
{{< summary-bar feature_name="Compose develop" >}}
`develop` specifies the development configuration for maintaining a container in sync with source, as defined in the [Development Section](develop.md).
### `device_cgroup_rules`
`device_cgroup_rules` defines a list of device cgroup rules for this container.
The format is the same format the Linux kernel specifies in the [Control Groups
Device Whitelist Controller](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/devices.html).
```yml
device_cgroup_rules:
- 'c 1:3 mr'
- 'a 7:* rmw'
```
### `devices`
`devices` defines a list of device mappings for created containers in the form of
`HOST_PATH:CONTAINER_PATH[:CGROUP_PERMISSIONS]`.
```yml
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
- "/dev/sda:/dev/xvda:rwm"
```
`devices` can also rely on the [CDI](https://github.com/cncf-tags/container-device-interface) syntax to let the container runtime select a device:
```yml
devices:
- "vendor1.com/device=gpu"
```
### `dns`
`dns` defines custom DNS servers to set on the container network interface configuration. It can be a single value or a list.
```yml
dns: 8.8.8.8
```
```yml
dns:
- 8.8.8.8
- 9.9.9.9
```
### `dns_opt`
`dns_opt` list custom DNS options to be passed to the container’s DNS resolver (`/etc/resolv.conf` file on Linux).
```yml
dns_opt:
- use-vc
- no-tld-query
```
### `dns_search`
`dns_search` defines custom DNS search domains to set on container network interface configuration. It can be a single value or a list.
```yml
dns_search: example.com
```
```yml
dns_search:
- dc1.example.com
- dc2.example.com
```
### `domainname`
`domainname` declares a custom domain name to use for the service container. It must be a valid RFC 1123 hostname.
### `driver_opts`
{{< summary-bar feature_name="Compose driver opts" >}}
`driver_opts` specifies a list of options as key-value pairs to pass to the driver. These options are
driver-dependent.
```yml
services:
app:
networks:
app_net:
driver_opts:
com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
```
Consult the [network drivers documentation](/manuals/engine/network/_index.md) for more information.
### `entrypoint`
`entrypoint` declares the default entrypoint for the service container.
This overrides the `ENTRYPOINT` instruction from the service's Dockerfile.
If `entrypoint` is non-null, Compose ignores any default command from the image, for example the `CMD`
instruction in the Dockerfile.
See also [`command`](#command) to set or override the default command to be executed by the entrypoint process.
In its short form, the value can be defined as a string:
```yml
entrypoint: /code/entrypoint.sh
```
Alternatively, the value can also be a list, in a manner similar to the
[Dockerfile](https://docs.docker.com/reference/dockerfile/#cmd):
```yml
entrypoint:
- php
- -d
- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
- -d
- memory_limit=-1
- vendor/bin/phpunit
```
If the value is `null`, the default entrypoint from the image is used.
If the value is `[]` (empty list) or `''` (empty string), the default entrypoint declared by the image is ignored, or in other words, overridden to be empty.