Skip to content

Commit

Permalink
[Docker] Add support for arm32/64 (#2104)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bockiii committed May 13, 2021
1 parent e79a02a commit 3585575
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 1 deletion.
21 changes: 20 additions & 1 deletion Dockerfile
@@ -1,4 +1,23 @@
FROM php:7-apache
ARG FROM_ARCH=amd64

# Multi-stage build, see https://docs.docker.com/develop/develop-images/multistage-build/
FROM alpine AS builder

# Download QEMU
ADD https://github.com/balena-io/qemu/releases/download/v5.2.0%2Bbalena4/qemu-5.2.0.balena4-arm.tar.gz .
RUN tar zxvf qemu-5.2.0.balena4-arm.tar.gz --strip-components 1
ADD https://github.com/balena-io/qemu/releases/download/v5.2.0%2Bbalena4/qemu-5.2.0.balena4-aarch64.tar.gz .
RUN tar zxvf qemu-5.2.0.balena4-aarch64.tar.gz --strip-components 1

FROM $FROM_ARCH/php:7-apache

LABEL description="RSS-Bridge is a PHP project capable of generating RSS and Atom feeds for websites that don't have one."
LABEL repository="https://github.com/RSS-Bridge/rss-bridge"
LABEL website="https://github.com/RSS-Bridge/rss-bridge"

# Add QEMU
COPY --from=builder qemu-arm-static /usr/bin
COPY --from=builder qemu-aarch64-static /usr/bin

ENV APACHE_DOCUMENT_ROOT=/app

Expand Down
10 changes: 10 additions & 0 deletions hooks/build
@@ -0,0 +1,10 @@
#!/bin/bash

# Custom build script to build images for all supported architectures.
# Example for IMAGE_NAME: rss-builder/rss-builder:stable

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
34 changes: 34 additions & 0 deletions hooks/post_push
@@ -0,0 +1,34 @@
#!/bin/bash

# Use manifest-tool to create the manifest, given the experimental
# "docker manifest" command isn't available yet on Docker Hub.
MANIFEST_TOOL_VERSION=$(curl -s https://api.github.com/repos/estesp/manifest-tool/releases/latest | grep 'tag_name' | cut -d\" -f4)
curl -Lo manifest-tool https://github.com/estesp/manifest-tool/releases/download/$MANIFEST_TOOL_VERSION/manifest-tool-linux-amd64
chmod +x manifest-tool

# Generate the manifest file.
# Parameter 1 is the multi-arch image name, e.g. rss-bridge/rss-bridge:stable
function generate_manifest {
cat > manifest-generated.yaml << EOF
image: $1
manifests:
- image: $1-amd64
platform:
architecture: amd64
os: linux
- image: $1-arm32v7
platform:
architecture: arm
os: linux
variant: v7
- image: $1-arm64v8
platform:
architecture: arm64
os: linux
variant: v8
EOF
}

echo "Pushing multi-arch manifest $IMAGE_NAME"
generate_manifest $IMAGE_NAME
./manifest-tool push from-spec manifest-generated.yaml
5 changes: 5 additions & 0 deletions hooks/pre_build
@@ -0,0 +1,5 @@
#!/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
9 changes: 9 additions & 0 deletions hooks/push
@@ -0,0 +1,9 @@
#!/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

0 comments on commit 3585575

Please sign in to comment.