But containers are supported on multiple architectures and operating systems
Manifest links to multiple images for supported platforms
Now integrated in Docker CLI (docker manifest)
Based on manifest-tool (by Docker Captain Phil Estes)
–
$ docker run mplatform/mquery openjdk:8-jdk
Image: openjdk:8-jdk
* Manifest List: Yes
* Supported platforms:
- linux/amd64
- windows/amd64:10.0.17763.805
- windows/amd64:10.0.17134.1069
- windows/amd64:10.0.14393.3274
$ docker run mplatform/mquery openjdk:8-jdk-nanoserver
Image: openjdk:8-jdk-nanoserver
* Manifest List: Yes
* Supported platforms:
- windows/amd64:10.0.17763.802
- windows/amd64:10.0.17134.1069
–
$ 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/ppc64le
- linux/s390x
- windows/amd64:10.0.17134.1069
- windows/amd64:10.0.17763.802
–
$ 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 experimental mode for client and enable qemu:
export DOCKER_CLI_EXPERIMENTAL=enabled
docker run --rm --privileged \
docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3
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