But containers are supported on multiple architectures and operating systems
Manifest links to separate image per platform
Now integrated in Docker CLI (docker manifest)
Based on manifest-tool (by Docker Captain Phil Estes)
–
$ docker run mplatform/mquery hello-world
Image: hello-world
* Manifest List: Yes
* Supported platforms:
- linux/amd64
- linux/arm/v5
- linux/arm/v7
- linux/arm64
- linux/386
- linux/mips64le
- linux/ppc64le
- linux/s390x
- windows/amd64:10.0.17763.1577
–
$ docker run mplatform/mquery docker
Image: docker
* Manifest List: Yes
* Supported platforms:
- linux/amd64
- linux/arm/v6
- linux/arm/v7
- linux/arm64
–
Prepare for new sub command buildx
Enable qemu:
docker run --privileged --rm tonistiigi/binfmt --install all
Create builder:
docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap
–
Build multi-arch:
docker buildx build \
--platform linux/arm,linux/arm64,linux/amd64 \
--tag localhost:5000/nicholasdille/hello \
. \
--push
Inspect result:
docker buildx imagetools inspect \
localhost:5000/nicholasdille/hello
–
Build individual images to control tagging
Build for arm, arm64 and amd64:
docker buildx build --platform linux/arm \
--tag localhost:5000/nicholasdille/hello:arm . --push
docker buildx build --platform linux/arm64 \
--tag localhost:5000/nicholasdille/hello:arm64 . --push
docker buildx build --platform linux/amd64 \
--tag localhost:5000/nicholasdille/hello:amd64 . --push
Test new images:
docker run localhost:5000/nicholasdille/hello:arm
docker run localhost:5000/nicholasdille/hello:arm64
docker run localhost:5000/nicholasdille/hello:amd64
This allows for proper versioning
–
Create manifest list with all images:
docker manifest create --amend --insecure \
localhost:5000/nicholasdille/hello \
localhost:5000/nicholasdille/hello:arm \
localhost:5000/nicholasdille/hello:arm64 \
localhost:5000/nicholasdille/hello:amd64
docker manifest inspect localhost:5000/nicholasdille/hello