Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Multi Platform Images #52

Closed
mbecker20 opened this issue Aug 30, 2024 · 6 comments
Closed

[Feature] Multi Platform Images #52

mbecker20 opened this issue Aug 30, 2024 · 6 comments

Comments

@mbecker20
Copy link
Member

Why make users have to specify their architecture with a different image tag? Multi platform images can solve this issue.

https://docs.docker.com/build/building/multi-platform/

@mbecker20 mbecker20 added the todo label Aug 31, 2024
@tagpro
Copy link

tagpro commented Sep 8, 2024

Facing this issue:

docker pull --platform=linux/arm64/v8 ghcr.io/mbecker20/periphery:latest-aarch64
latest-aarch64: Pulling from mbecker20/periphery
Digest: sha256:bd616228028a384dc9e64182c7d447c893f30641b70eb7cb57a3b0f2c4ee0bae
Status: Image is up to date for ghcr.io/mbecker20/periphery:latest-aarch64
image with reference ghcr.io/mbecker20/periphery:latest-aarch64 was found but does not match the specified platform: wanted linux/arm64/v8, actual: linux/amd64

arm tagged images are actually amd images

@mbecker20
Copy link
Member Author

Hey, this is fixed, i've saved the Build to use the correct arm based instance type now. Thanks for letting me know, apologies!

@loan-mgt
Copy link

Hi, there is another issue open to convert the images to true multi-platform. For now, arm support is user the ":latest-aarch64" tags:

* ghcr.io/mbecker20/komodo:latest-aarch64

* ghcr.io/mbecker20/periphery:latest-aarch64

@arevindh
Copy link

arevindh commented Nov 3, 2024

Hello, I'm working on making my Node application compatible with both aarch64 and amd64 architectures.

Here’s the usual process I follow:

Step 1: Set up Docker Buildx

Ensure that buildx is available and initialized. If buildx isn’t already enabled in Docker, you can enable it by running:

docker buildx create --name mybuilder --use --bootstrap
docker buildx ls

Step 2: Build Multi-Platform Image

Use the following command to build and push a multi-platform image

docker buildx build --platform linux/arm64/v8,linux/amd64 --builder mybuilder -t yourusername/yourimagename:tag --push .

Explanation of Flags

  • --platform linux/amd64,linux/arm64 : Specifies the platforms to build for.
  • -t yourusername/yourimagename:tag : Tags the image.
  • --push : Pushes the built images directly to a Docker registry. This is necessary for multi-platform images as they must reside in a registry to be used effectively.

I managed to accomplish everything (100%) with Komodo, except for the creation of the builder, using Extra Args.

image

image

Issue

The build status fails during the final push step on the builder.

image

...... && docker image push --all-tags yourusername/yourimagename
#17 exporting to image
#17 pushing layers 11.0s done
#17 pushing manifest for yourusername/yourimagename:latest@sha256:05a35169efb6d6a6008645f649639856852fe0546112656d7ac2f1cfb7c125a0
#17 pushing manifest for yourusername/yourimagename:latest@sha256:05a35169efb6d6a6008645f649639856852fe0546112656d7ac2f1cfb7c125a0 0.2s done
#17 pushing layers 0.0s done
#17 pushing manifest for yourusername/yourimagename:0.0.8@sha256:05a35169efb6d6a6008645f649639856852fe0546112656d7ac2f1cfb7c125a0 0.1s done
#17 pushing layers 0.0s done
#17 pushing manifest for yourusername/yourimagename:0.0@sha256:05a35169efb6d6a6008645f649639856852fe0546112656d7ac2f1cfb7c125a0 0.1s done
#17 pushing layers 0.0s done
#17 pushing manifest for yourusername/yourimagename:0@sha256:05a35169efb6d6a6008645f649639856852fe0546112656d7ac2f1cfb7c125a0 0.1s done
#17 pushing layers 0.1s done
#17 pushing manifest for yourusername/yourimagename:482e101@sha256:05a35169efb6d6a6008645f649639856852fe0546112656d7ac2f1cfb7c125a0 0.1s done
#17 DONE 11.7s
An image does not exist locally with the tag: yourusername/yourimagename

You can also remove push --all-tags; with a normal build, it was also re-pushing all tags if a tag was deleted from the Docker registry.

@mbecker20
Copy link
Member Author

Excellent write up @arevindh, thank you.

@mbecker20 mbecker20 mentioned this issue Nov 14, 2024
@mbecker20
Copy link
Member Author

mbecker20 commented Nov 15, 2024

@arevindh Per your suggestion, it will just use --push flag with docker build starting from v1.16.11, rather than another call to docker image push. It works in all situations :). Thanks for the feedback!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants