From b76f53bb79fc9f6f60de90f28a8194a48764d146 Mon Sep 17 00:00:00 2001 From: Christopher May-Townsend Date: Mon, 12 Oct 2020 22:00:33 +0100 Subject: [PATCH] Multi arch docker support: add arm/v7 and arm64 to our docker images (#7921) Signed-off-by: Christopher May-Townsend (chris@maytownsend.co.uk) --- .circleci/config.yml | 60 +++++++++++++++++++++++++++++++++++------ changelog.d/7921.docker | 1 + 2 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 changelog.d/7921.docker diff --git a/.circleci/config.yml b/.circleci/config.yml index 5bd2ab2b7..b10cbedd6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,22 +1,36 @@ -version: 2 +version: 2.1 jobs: dockerhubuploadrelease: - machine: true + docker: + - image: docker:git steps: - checkout - - run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:${CIRCLE_TAG} . + - setup_remote_docker + - docker_prepare - run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD - - run: docker push matrixdotorg/synapse:${CIRCLE_TAG} + - docker_build: + tag: -t matrixdotorg/synapse:${CIRCLE_TAG} + platforms: linux/amd64 + - docker_build: + tag: -t matrixdotorg/synapse:${CIRCLE_TAG} + platforms: linux/amd64,linux/arm/v7,linux/arm64 + dockerhubuploadlatest: - machine: true + docker: + - image: docker:git steps: - checkout - - run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:latest . + - setup_remote_docker + - docker_prepare - run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD - - run: docker push matrixdotorg/synapse:latest + - docker_build: + tag: -t matrixdotorg/synapse:latest + platforms: linux/amd64 + - docker_build: + tag: -t matrixdotorg/synapse:latest + platforms: linux/amd64,linux/arm/v7,linux/arm64 workflows: - version: 2 build: jobs: - dockerhubuploadrelease: @@ -29,3 +43,33 @@ workflows: filters: branches: only: master + +commands: + docker_prepare: + description: Downloads the buildx cli plugin and enables multiarch images + parameters: + buildx_version: + type: string + default: "v0.4.1" + steps: + - run: apk add --no-cache curl + - run: mkdir -vp ~/.docker/cli-plugins/ ~/dockercache + - run: curl --silent -L "https://github.com/docker/buildx/releases/download/<< parameters.buildx_version >>/buildx-<< parameters.buildx_version >>.linux-amd64" > ~/.docker/cli-plugins/docker-buildx + - run: chmod a+x ~/.docker/cli-plugins/docker-buildx + # install qemu links in /proc/sys/fs/binfmt_misc on the docker instance running the circleci job + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + # create a context named `builder` for the builds + - run: docker context create builder + # create a buildx builder using the new context, and set it as the default + - run: docker buildx create builder --use + + docker_build: + description: Builds and pushed images to dockerhub using buildx + parameters: + platforms: + type: string + default: linux/amd64 + tag: + type: string + steps: + - run: docker buildx build -f docker/Dockerfile --push --platform << parameters.platforms >> --label gitsha1=${CIRCLE_SHA1} << parameters.tag >> --progress=plain . diff --git a/changelog.d/7921.docker b/changelog.d/7921.docker new file mode 100644 index 000000000..7cecd67c6 --- /dev/null +++ b/changelog.d/7921.docker @@ -0,0 +1 @@ +Added multi-arch support (arm64,arm/v7) for the docker images. Contributed by @maquis196.