sqitchers / docker-sqitch

Docker Image packaging for Sqitch
MIT License
35 stars 39 forks source link

(Feature Request) Support Multi-Architecture Docker Images #57

Closed rotten closed 9 months ago

rotten commented 10 months ago

The current sqitch/sqitch image in docker.io only supports Linux/AMD64 architecture. This feature request is to support Linux/ARM64 as well so that we can use this image on the new AWS Graviton processors.

The Graviton processors are often faster than their Intel equivalents and are also much cheaper.

It should just be a docker build command line update (use docker build buildx instead).

$  docker manifest inspect --verbose sqitch/sqitch
{
    "Ref": "docker.io/sqitch/sqitch:latest",
    "Descriptor": {
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "digest": "sha256:4ff357cada9dbdb5ef9a2a6a0f93d92fed5a06a53aec606d3e243533213e40dc",
        "size": 1367,
        "platform": {
            "architecture": "amd64",
            "os": "linux"
        }
    },
    "Raw": "ewogICAic2NoZW1hVmVyc2lvbiI6IDIsCiAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5kaXN0cmlidXRpb24ubWFuaWZlc3QudjIranNvbiIsCiAgICJjb25maWciOiB7CiAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5jb250YWluZXIuaW1hZ2UudjEranNvbiIsCiAgICAgICJzaXplIjogNTUxNCwKICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6ZWM3NmM1ZjI1YmM1N2Y2ZTU4Mjc0NTYxMTViZGY1NWEyOTZiZmQzNGQxZmRhM2FmODc3MzJlMTExNTE1NzUzZiIKICAgfSwKICAgImxheWVycyI6IFsKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDMxNDE3Njc4LAogICAgICAgICAiZGlnZXN0IjogInNoYTI1NjoxNDcyNmM4Zjc4MzQyODY1MDMwZjk3YThkMzQ5MmUyZDFhNjhmYmQyMjc3OGY5YTMxZGM2YmU0YjRmMTJhOWJjIgogICAgICB9LAogICAgICB7CiAgICAgICAgICJtZWRpYVR5cGUiOiAiYXBwbGljYXRpb24vdm5kLmRvY2tlci5pbWFnZS5yb290ZnMuZGlmZi50YXIuZ3ppcCIsCiAgICAgICAgICJzaXplIjogMjYwMDQ1MDMsCiAgICAgICAgICJkaWdlc3QiOiAic2hhMjU2OjBlMWRmYzNkNGZiMmM3YTBkYTYyZWRhZGEzZTE1MzIxZmMzNjQwNGFlODFkMmM2MGJmMjE2MDQyMjE2ZDM0OWUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIm1lZGlhVHlwZSI6ICJhcHBsaWNhdGlvbi92bmQuZG9ja2VyLmltYWdlLnJvb3Rmcy5kaWZmLnRhci5nemlwIiwKICAgICAgICAgInNpemUiOiAxMTMzODMwNSwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6NzQ1MjU3OTA0Yzg2YjlkZmEzNmVhMzc2NzlkOTU0YTUyYTJjOGVlZTIwYmQ4NTI3NTk0YzExOTNmN2QyYzI4NyIKICAgICAgfSwKICAgICAgewogICAgICAgICAibWVkaWFUeXBlIjogImFwcGxpY2F0aW9uL3ZuZC5kb2NrZXIuaW1hZ2Uucm9vdGZzLmRpZmYudGFyLmd6aXAiLAogICAgICAgICAic2l6ZSI6IDE5MTAsCiAgICAgICAgICJkaWdlc3QiOiAic2hhMjU2OmM2ZDVlNWEyNjliZjViZjcxM2ZlNDVkMDA2Njk3MGNlMWY3M2Y3NTg2MjM5MWM0MGU5MzUyODk3NjcwN2E1MjUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIm1lZGlhVHlwZSI6ICJhcHBsaWNhdGlvbi92bmQuZG9ja2VyLmltYWdlLnJvb3Rmcy5kaWZmLnRhci5nemlwIiwKICAgICAgICAgInNpemUiOiA5OSwKICAgICAgICAgImRpZ2VzdCI6ICJzaGEyNTY6NDkxN2IzMGYwN2I3ZmIwNDIyMTA5NmMyMmJiNDQzNGFkZjI3YzljMWI2MWNiZjhhODU0OGMzZTNjZGIxMjM3ZSIKICAgICAgfQogICBdCn0=",
    "SchemaV2Manifest": {
        "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "config": {
            "mediaType": "application/vnd.docker.container.image.v1+json",
            "size": 5514,
            "digest": "sha256:ec76c5f25bc57f6e5827456115bdf55a296bfd34d1fda3af87732e111515753f"
        },
        "layers": [
            {
                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                "size": 31417678,
                "digest": "sha256:14726c8f78342865030f97a8d3492e2d1a68fbd22778f9a31dc6be4b4f12a9bc"
            },
            {
                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                "size": 26004503,
                "digest": "sha256:0e1dfc3d4fb2c7a0da62edada3e15321fc36404ae81d2c60bf216042216d349e"
            },
            {
                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                "size": 11338305,
                "digest": "sha256:745257904c86b9dfa36ea37679d954a52a2c8eee20bd8527594c1193f7d2c287"
            },
            {
                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                "size": 1910,
                "digest": "sha256:c6d5e5a269bf5bf713fe45d0066970ce1f73f75862391c40e93528976707a525"
            },
            {
                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                "size": 99,
                "digest": "sha256:4917b30f07b7fb04221096c22bb4434adf27c9c1b61cbf8a8548c3e3cdb1237e"
            }
        ]
    }
}
theory commented 10 months ago

I've been meaning to look into multi-arch builds for a while, since I use an ARM Mac all day long. The build script already uses docker buildx build, but it seems more needs to be done, eh?

rotten commented 10 months ago

Even better. All you have to do is add a ,linux/ARM64 to the --platform argument

theory commented 10 months ago

Had to docker buildx create --use default on my Mac first, but it seems to work. Will push shortly.

theory commented 10 months ago

Well the build failed. I tried running it on my Mac, it built nicely but could find no manifests. I added --push to see what happens, and the images were pushed!

So need to figure out what GitHub Workflow's problem is. Was hoping to keep the build and the push separate, so push happens only on tagging.

theory commented 9 months ago

Okay, got things revamped in #58. Will get it merged and released in the next few days.

rotten commented 9 months ago

Thanks! I'm sorry that turned out to be harder than it appeared.

theory commented 9 months ago

Merged and released! v1.4.0.2 now comes in both flavors (and are also tagged v1.4.0 and v1.4).