service: webapp
```
- `service`: Defines the name of the service being referenced as a base, for example `web` or `database`.
- `file`: The location of a Compose configuration file defining that service.
#### Restrictions
When a service is referenced using `extends`, it can declare dependencies on other resources. These dependencies may be explicitly defined through attributes like `volumes`, `networks`, `configs`, `secrets`, `links`, `volumes_from`, or `depends_on`. Alternatively, dependencies can reference another service using the `service:{name}` syntax in namespace declarations such as `ipc`, `pid`, or `network_mode`.
Compose does not automatically import these referenced resources into the extended model. It is your responsibility to ensure all required resources are explicitly declared in the model that relies on extends.
Circular references with `extends` are not supported, Compose returns an error when one is detected.
#### Finding referenced service
`file` value can be:
- Not present.
This indicates that another service within the same Compose file is being referenced.
- File path, which can be either:
- Relative path. This path is considered as relative to the location of the main Compose
file.
- Absolute path.
A service denoted by `service` must be present in the identified referenced Compose file.
Compose returns an error if:
- The service denoted by `service` is not found.
- The Compose file denoted by `file` is not found.
#### Merging service definitions
Two service definitions, the main one in the current Compose file and the referenced one
specified by `extends`, are merged in the following way:
- Mappings: Keys in mappings of the main service definition override keys in mappings
of the referenced service definition. Keys that aren't overridden are included as is.
- Sequences: Items are combined together into a new sequence. The order of elements is
preserved with the referenced items coming first and main items after.
- Scalars: Keys in the main service definition take precedence over keys in the
referenced one.
##### Mappings
The following keys should be treated as mappings: `annotations`, `build.args`, `build.labels`,
`build.extra_hosts`, `deploy.labels`, `deploy.update_config`, `deploy.rollback_config`,
`deploy.restart_policy`, `deploy.resources.limits`, `environment`, `healthcheck`,
`labels`, `logging.options`, `sysctls`, `storage_opt`, `extra_hosts`, `ulimits`.
One exception that applies to `healthcheck` is that the main mapping cannot specify
`disable: true` unless the referenced mapping also specifies `disable: true`. Compose returns an error in this case.
For example, the following input:
```yaml
services:
common:
image: busybox
environment:
TZ: utc
PORT: 80
cli:
extends:
service: common
environment:
PORT: 8080
```
Produces the following configuration for the `cli` service. The same output is
produced if array syntax is used.
```yaml
environment:
PORT: 8080
TZ: utc
image: busybox
```
Items under `blkio_config.device_read_bps`, `blkio_config.device_read_iops`,
`blkio_config.device_write_bps`, `blkio_config.device_write_iops`, `devices` and
`volumes` are also treated as mappings where key is the target path inside the
container.
For example, the following input:
```yaml
services:
common:
image: busybox
volumes:
- common-volume:/var/lib/backup/data:rw
cli:
extends:
service: common
volumes:
- cli-volume:/var/lib/backup/data:ro
```
Produces the following configuration for the `cli` service. Note that the mounted path
now points to the new volume name and `ro` flag was applied.
```yaml
image: busybox
volumes:
- cli-volume:/var/lib/backup/data:ro
```
If the referenced service definition contains `extends` mapping, the items under it
are simply copied into the new merged definition. The merging process is then kicked
off again until no `extends` keys are remaining.
For example, the following input: