Skip to content

Commit dd3be1e

Browse files
authored
Merge pull request #24327 from dvdksn/multiplatform-stale-containerd-ref
build: update multi-platform doc; containerd image store is now default
2 parents c09b61d + c8900b7 commit dd3be1e

1 file changed

Lines changed: 27 additions & 46 deletions

File tree

content/manuals/build/building/multi-platform.md

Lines changed: 27 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ weight: 40
55
description: Introduction to what multi-platform builds are and how to execute them using Docker Buildx.
66
keywords: build, buildx, buildkit, multi-platform, cross-platform, cross-compilation, emulation, QEMU, ARM, x86, Windows, Linux, macOS
77
aliases:
8-
- /build/buildx/multiplatform-images/
9-
- /desktop/multi-arch/
10-
- /docker-for-mac/multi-arch/
11-
- /mackit/multi-arch/
12-
- /build/guide/multi-platform/
8+
- /build/buildx/multiplatform-images/
9+
- /desktop/multi-arch/
10+
- /docker-for-mac/multi-arch/
11+
- /mackit/multi-arch/
12+
- /build/guide/multi-platform/
1313
---
1414

1515
A multi-platform build refers to a single build invocation that targets
@@ -55,40 +55,26 @@ selects the `linux/amd64` variant (if you're using Linux containers).
5555

5656
## Prerequisites
5757

58-
To build multi-platform images, you first need to make sure that your Docker
59-
environment is set up to support it. There are two ways you can do that:
58+
Multi-platform images require an image store that supports manifest lists.
59+
Docker Desktop and Docker Engine 29.0+ use the
60+
[containerd image store](/manuals/desktop/features/containerd.md) by default,
61+
which supports multi-platform images out of the box. If you're using one of
62+
these versions, no additional setup is needed.
6063

61-
- You can switch from the "classic" image store to the containerd image store.
62-
- You can create and use a custom builder.
64+
If you're using an older version of Docker Engine, or if you upgraded from an
65+
older version that still uses classic storage drivers, you have two options:
6366

64-
The "classic" image store of the Docker Engine does not support multi-platform
65-
images. Switching to the containerd image store ensures that your Docker Engine
66-
can push, pull, and build multi-platform images.
67+
- Enable the containerd image store using the
68+
[daemon configuration file](/manuals/engine/storage/containerd.md).
69+
- Create a custom builder using the `docker-container` driver (see the following section).
6770

68-
Creating a custom builder that uses a driver with multi-platform support,
69-
such as the `docker-container` driver, will let you build multi-platform images
70-
without switching to a different image store. However, you still won't be able
71-
to load the multi-platform images you build into your Docker Engine image
72-
store. But you can push them to a container registry directly with `docker
73-
build --push`.
71+
### Custom builder
7472

75-
{{< tabs >}}
76-
{{< tab name="containerd image store" >}}
77-
78-
The steps for enabling the containerd image store depends on whether you're
79-
using Docker Desktop or Docker Engine standalone:
80-
81-
- If you're using Docker Desktop, enable the containerd image store in the
82-
[Docker Desktop settings](/manuals/desktop/features/containerd.md).
83-
84-
- If you're using Docker Engine standalone, enable the containerd image store
85-
using the [daemon configuration file](/manuals/engine/storage/containerd.md).
86-
87-
{{< /tab >}}
88-
{{< tab name="Custom builder" >}}
89-
90-
To create a custom builder, use the `docker buildx create` command to create a
91-
builder that uses the `docker-container` driver.
73+
As an alternative to using the containerd image store, you can create a custom
74+
builder that uses the `docker-container` driver. This driver supports
75+
multi-platform builds, but the resulting images aren't loaded into your Docker
76+
Engine image store. You can push them to a container registry directly with
77+
`docker build --push`.
9278

9379
```console
9480
$ docker buildx create \
@@ -102,9 +88,6 @@ $ docker buildx create \
10288
> Docker Engine image store. For more information, see [Build
10389
> drivers](/manuals/build/builders/drivers/_index.md).
10490
105-
{{< /tab >}}
106-
{{< /tabs >}}
107-
10891
If you're using Docker Engine standalone and you need to build multi-platform
10992
images using emulation, you also need to install QEMU, see [Install QEMU
11093
manually](#install-qemu-manually).
@@ -257,7 +240,6 @@ architecture of the container.
257240
Prerequisites:
258241

259242
- Docker Desktop, or Docker Engine with [QEMU installed](#install-qemu-manually)
260-
- containerd image store enabled
261243

262244
Steps:
263245

@@ -331,7 +313,7 @@ Steps:
331313
unzip
332314
ADD https://github.com/neovim/neovim.git#stable .
333315
RUN make CMAKE_BUILD_TYPE=RelWithDebInfo
334-
316+
335317
FROM scratch
336318
COPY --from=build /work/build/bin/nvim /
337319
```
@@ -358,7 +340,7 @@ Steps:
358340
│   └── nvim
359341
└── linux_arm64
360342
└── nvim
361-
343+
362344
3 directories, 2 files
363345
```
364346

@@ -399,7 +381,7 @@ Steps:
399381
WORKDIR /app
400382
ADD https://github.com/dvdksn/buildme.git#eb6279e0ad8a10003718656c6867539bd9426ad8 .
401383
RUN go build -o server .
402-
384+
403385
FROM alpine
404386
COPY --from=build /app/server /server
405387
ENTRYPOINT ["/server"]
@@ -412,7 +394,6 @@ Steps:
412394

413395
3. To add cross-compilation support, update the Dockerfile to use the
414396
pre-defined `BUILDPLATFORM`, `TARGETOS` and `TARGETARCH` build arguments.
415-
416397
- Pin the `golang` image to the platform of the builder using the
417398
`--platform=$BUILDPLATFORM` option.
418399
- Add `ARG` instructions for the Go compilation stages to make the
@@ -433,7 +414,7 @@ Steps:
433414
WORKDIR /app
434415
ADD https://github.com/dvdksn/buildme.git#eb6279e0ad8a10003718656c6867539bd9426ad8 .
435416
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o server .
436-
417+
437418
FROM alpine
438419
COPY --from=build /app/server /server
439420
ENTRYPOINT ["/server"]
@@ -448,7 +429,7 @@ Steps:
448429
WORKDIR /app
449430
ADD https://github.com/dvdksn/buildme.git#eb6279e0ad8a10003718656c6867539bd9426ad8 .
450431
RUN go build -o server .
451-
432+
452433
FROM alpine
453434
COPY --from=build /app/server /server
454435
ENTRYPOINT ["/server"]
@@ -467,7 +448,7 @@ Steps:
467448
ADD https://github.com/dvdksn/buildme.git#eb6279e0ad8a10003718656c6867539bd9426ad8 .
468449
-RUN go build -o server .
469450
+RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o server .
470-
451+
471452
FROM alpine
472453
COPY --from=build /app/server /server
473454
ENTRYPOINT ["/server"]

0 commit comments

Comments
 (0)