Cheatsheet

I'm not googling that again

Playing around with docker multi arch support

With the arrival of M1 chips I experienced a larger need to support multi-arch docker images in a container registry. This is a quick and dirty recipe to get a manifest list published to gcr after having ready images that target amd and arm architectures.

# tag the images and push them to the container registry
docker image tag <arm-image-id> gcr.io/<your-project>/<your-image>:<version>-arm64
docker image tag <amd-image-id> gcr.io/<your-project>/<your-image>:<version>-amd64

docker push gcr.io/<your-project>/<your-image>:<version>-arm64
docker push gcr.io/<your-project>/<your-image>:<version>-amd64

# create a manifest list

docker manifest create gcr.io/<your-project>/<your-image>:<version> \
gcr.io/<your-project>/<your-image>:<version>-amd64 \
gcr.io/<your-project>/<your-image>:<version>-arm64

# annotate it (this might not be necessary)
docker manifest annotate --arch arm64 \
  gcr.io/<your-project>/<your-image>:<version> \
  gcr.io/<your-project>/<your-image>:<version>-arm64
  
docker manifest annotate --arch amd64 \
  gcr.io/<your-project>/<your-image>:<version> \
  gcr.io/<your-project>/<your-image>:<version>-amd64

# push it to the container registry
docker manifest push gcr.io/<your-project>/<your-image>:<version>

# inspect it if you want
docker manifest inspect gcr.io/<your-project>/<your-image>:<version>

There you go, next time you pull gcr.io/<your-project>/<your-image>:<version>, you'll get an image with the right target architecture :)

References