From 0321580250cf50cda4afcfa63bec0956f5cff446 Mon Sep 17 00:00:00 2001 From: Robert Resch Date: Thu, 17 Jun 2021 22:59:41 +0200 Subject: [PATCH] use buildx to build multi arch images --- .github/workflows/docker-images.yml | 32 +++++++++++++++++++++++++++ Dockerfile | 24 ++------------------ hooks/build | 10 --------- hooks/post_push | 34 ----------------------------- hooks/pre_build | 5 ----- hooks/push | 9 -------- 6 files changed, 34 insertions(+), 80 deletions(-) create mode 100644 .github/workflows/docker-images.yml delete mode 100644 hooks/build delete mode 100644 hooks/post_push delete mode 100644 hooks/pre_build delete mode 100644 hooks/push diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml new file mode 100644 index 0000000..d6a2ae8 --- /dev/null +++ b/.github/workflows/docker-images.yml @@ -0,0 +1,32 @@ +name: Build docker images + +on: + push: + branches: + - master + - next + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: checkout code + uses: actions/checkout@v2 + + # https://github.com/docker/setup-qemu-action + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + # https://github.com/docker/setup-buildx-action + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + + - name: login to docker hub + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: build the image + run: | + docker buildx build --push \ + --tag edenhaus/bumper:latest \ + --platform linux/amd64,linux/arm/v7,linux/arm64 . \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f85850c..072d793 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,6 @@ -ARG FROM_ARCH=amd64 +ARG ARCH=amd64 -FROM alpine as builder - -# Download QEMU, see https://github.com/ckulka/docker-multi-arch-example -ADD https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-arm.tar.gz . -RUN tar zxvf qemu-3.0.0+resin-arm.tar.gz --strip-components 1 -ADD https://github.com/balena-io/qemu/releases/download/v3.0.0%2Bresin/qemu-3.0.0+resin-aarch64.tar.gz . -RUN tar zxvf qemu-3.0.0+resin-aarch64.tar.gz --strip-components 1 - -FROM $FROM_ARCH/python:3.7-alpine as base - -# Add QEMU -# Add QEMU -COPY --from=builder qemu-arm-static /usr/bin -COPY --from=builder qemu-aarch64-static /usr/bin - -FROM base as builderfinal - -# add build utils (gcc, others) -RUN apk add build-base - -FROM base +FROM $ARCH/python:3.8-alpine COPY requirements.txt /requirements.txt diff --git a/hooks/build b/hooks/build deleted file mode 100644 index 9d5e830..0000000 --- a/hooks/build +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# Custom build script to build images for all supported architectures. -# Example for IMAGE_NAME: ckulka/baikal:apache - -for arch in amd64 arm32v7 arm64v8 -do - echo "Building $IMAGE_NAME-$arch" - docker build --build-arg FROM_ARCH=$arch --file $DOCKERFILE_PATH --tag $IMAGE_NAME-$arch . -done \ No newline at end of file diff --git a/hooks/post_push b/hooks/post_push deleted file mode 100644 index 063de94..0000000 --- a/hooks/post_push +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# Use manifest-tool to create the manifest, given the experimental -# "docker manifest" command isn't available yet on Docker Hub. -curl -Lo manifest-tool https://github.com/estesp/manifest-tool/releases/download/v0.9.0/manifest-tool-linux-amd64 -chmod +x manifest-tool - -# Generate the manifest file. -# Parameter 1 is the multi-arch image name, e.g. ckulka/baikal:0.5.1 -# Parameter 2 is the base-image for the variants, e.g. ckulka/baikal:0.5.1-apache -function generate_manifest { - cat > manifest-generated.yaml << EOF -image: $1 -manifests: - - image: $2-amd64 - platform: - architecture: amd64 - os: linux - - image: $2-arm32v7 - platform: - architecture: arm - os: linux - variant: v7 - - image: $2-arm64v8 - platform: - architecture: arm64 - os: linux - variant: v8 -EOF -} - -echo "Pushing multi-arch manifest $IMAGE_NAME" -generate_manifest $IMAGE_NAME $IMAGE_NAME -./manifest-tool push from-spec manifest-generated.yaml \ No newline at end of file diff --git a/hooks/pre_build b/hooks/pre_build deleted file mode 100644 index d5a811d..0000000 --- a/hooks/pre_build +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Register qemu-*-static for all supported processors except the -# current one, but also remove all registered binfmt_misc before -docker run --rm --privileged multiarch/qemu-user-static:register --reset \ No newline at end of file diff --git a/hooks/push b/hooks/push deleted file mode 100644 index 8d65007..0000000 --- a/hooks/push +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -# Custom build script to push images for all supported architectures. - -for arch in amd64 arm32v7 arm64v8 -do - echo "Pushing $IMAGE_NAME-$arch" - docker push $IMAGE_NAME-$arch -done \ No newline at end of file