mbecker20 / komodo

🦎 a tool to build and deploy software on many servers 🦎
https://komo.do
GNU General Public License v3.0
1.87k stars 36 forks source link

[Feature] Multi Platform Images #52

Open mbecker20 opened 2 months ago

mbecker20 commented 2 months ago

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/

tagpro commented 2 months ago

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 commented 2 months ago

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 commented 2 months ago

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 commented 2 weeks ago

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

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 commented 2 weeks ago

Excellent write up @arevindh, thank you.

mbecker20 commented 1 week ago

@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!