Skip to content

Commit

Permalink
Merge pull request #21980 from docker/published-update
Browse files Browse the repository at this point in the history
publish updates from main
  • Loading branch information
aevesdocker authored Feb 6, 2025
2 parents c50bc4f + 4e1eb29 commit 47560c5
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 7 deletions.
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

0 comments on commit 47560c5

Please sign in to comment.