Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ title: Build dependent images
weight: 50
---

{{< summary-bar feature_name="Compose dependent images" >}}

To reduce push/pull time and image weight, a common practice for Compose applications is to have services
share base layers as much as possible. You will typically select the same operating system base image for
all services. But you also can get one step further sharing image layers when your images share the same
Expand All @@ -19,7 +21,6 @@ image and install system package `openssl`.
The recommended approach is to group the shared declaration in a single Dockerfile, and use multi-stage features
so that service images are built from this shared declaration.


Dockerfile:

```dockerfile
Expand Down Expand Up @@ -53,7 +54,6 @@ A popular pattern is to reuse a service image as a base image in another service
As Compose does not parse the Dockerfile, it can't automatically detect this dependency
between services to correctly order the build execution.


a.Dockerfile:

```dockerfile
Expand Down Expand Up @@ -82,7 +82,6 @@ services:
dockerfile: b.Dockerfile
```


Legacy Docker Compose v1 used to build images sequentially, which made this pattern usable
out of the box. Compose v2 uses BuildKit to optimise builds and build images in parallel
and requires an explicit declaration.
Expand All @@ -107,7 +106,6 @@ services:
service_a: "service:a"
```


## Build with Bake

Using [Bake](/manuals/build/bake/_index.md) let you pass the complete build definition for all services
Expand Down
22 changes: 22 additions & 0 deletions content/reference/compose-file/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,28 @@ the unused contexts.
Illustrative examples of how this is used in Buildx can be found
[here](https://github.com/docker/buildx/blob/master/docs/reference/buildx_build.md#-additional-build-contexts---build-context).

`additional_contexts` can also refer to an image built by another service.
This allows a service image to be built using another service image as a base image, and to share
layers between service images.

```yaml
services:
base:
build:
context: .
dockerfile_inline: |
FROM alpine
RUN ...
base:
build:
context: .
dockerfile_inline: |
FROM base # image built for service base
RUN ...
additional_contexts:
base: service:base
```

### `args`

`args` define build arguments, that is Dockerfile `ARG` values.
Expand Down
4 changes: 2 additions & 2 deletions content/reference/compose-file/merge.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ While these types are modeled in a Compose file as a sequence, they have special
| Attribute | Unique key |
|-------------|--------------------------|
| volumes | target |
| secrets | source |
| configs | source |
| secrets | target |
| configs | target |
| ports | {ip, target, published, protocol} |

When merging Compose files, Compose appends new entries that do not violate a uniqueness constraint and merge entries that share a unique key.
Expand Down
23 changes: 23 additions & 0 deletions content/reference/compose-file/services.md
Original file line number Diff line number Diff line change
Expand Up @@ -1005,6 +1005,29 @@ configuration, which means for Linux `/etc/hosts` get extra lines:
::1 myhostv6
```

### `gpus`

{{< summary-bar feature_name="Compose gpus" >}}

`gpus` specifies GPU devices to be allocated for container usage. This is equivalent to a [device request](deploy.md#devices) with
an implicit `gpu` capability.

```yaml
services:
model:
gpus:
- driver: 3dfx
count: 2
```

`gpus` also can be set as string `all` to allocate all available GPU devices to the container.

```yaml
services:
model:
gpus: all
```

### `group_add`

`group_add` specifies additional groups, by name or number, which the user inside the container must be a member of.
Expand Down
6 changes: 5 additions & 1 deletion data/summary.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,10 @@ Compose bridge:
availability: Experimental
Config profiles:
requires: Docker Desktop 4.36 and later
Compose dependent images:
requires: Docker Compose [2.22.0](/manuals/compose/releases/release-notes.md#2220) and later
Compose cgroup:
requires: Docker Compose [2.15.0](/manuals/compose/releases/release-notes.md#2200) and later
requires: Docker Compose [2.15.0](/manuals/compose/releases/release-notes.md#2150) and later
Compose develop:
requires: Docker Compose [2.22.0](/manuals/compose/releases/release-notes.md#2220) and later
Compose driver opts:
Expand All @@ -81,6 +83,8 @@ Compose file watch:
requires: Docker Compose [2.22.0](/manuals/compose/releases/release-notes.md#2220) and later
Compose format:
requires: Docker Compose [2.30.0](/manuals/compose/releases/release-notes.md#2300) and later
Compose gpus:
requires: Docker Compose [2.30.0](/manuals/compose/releases/release-notes.md#2300) and later
Compose include:
requires: Docker Compose [2.20.3](/manuals/compose/releases/release-notes.md#2203) and later
Compose label file:
Expand Down