Cheatsheet
I'm not googling that again
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 :)