From 64d451bdca99df3e7b001a992d7142e66197810b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20Gr=C3=B6nberg?= Date: Tue, 30 Jun 2020 22:22:29 +0200 Subject: [PATCH 1/3] Make Dockerfile multiarch. Support for: - amd64 - arm64 - armv7 - armv6 --- docker/Dockerfile | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 38117a3dc..517d102d8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,15 +1,13 @@ -FROM frolvlad/alpine-glibc +FROM gronis/alpine-glibc -# Supercronic install settings -ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.8/supercronic-linux-amd64 \ - SUPERCRONIC=supercronic-linux-amd64 \ - SUPERCRONIC_SHA1SUM=be43e64c45acd6ec4fce5831e03759c89676a0ea - -# Install SeaweedFS and Supercronic ( for cron job mode ) -# Tried to use curl only (curl -o /tmp/linux_amd64.tar.gz ...), however it turned out that the following tar command failed with "gzip: stdin: not in gzip format" -RUN apk add --no-cache --virtual build-dependencies --update wget curl ca-certificates && \ - wget -P /tmp https://github.com/$(curl -s -L https://github.com/chrislusf/seaweedfs/releases/latest | egrep -o 'chrislusf/seaweedfs/releases/download/.*/linux_amd64.tar.gz') && \ - tar -C /usr/bin/ -xzvf /tmp/linux_amd64.tar.gz && \ +RUN ARCH=$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g' | sed 's/armv7l/arm/g') && \ + SUPERCRONIC_SHA1SUM=$(echo $ARCH | sed 's/amd64/5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85/g' | sed 's/arm64/e2714c43e7781bf1579c85aa61259245f56dbba1/g' | sed 's/arm/47481c3341bc3a1ae91a728e0cc63c8e6d3791ad/g') && \ + SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-$ARCH && \ + SUPERCRONIC=supercronic-linux-$ARCH && \ + # Install SeaweedFS and Supercronic ( for cron job mode ) + apk add --no-cache --virtual build-dependencies --update wget curl ca-certificates && \ + wget -P /tmp https://github.com/$(curl -s -L https://github.com/chrislusf/seaweedfs/releases/latest | egrep -o "chrislusf/seaweedfs/releases/download/.*/linux_$ARCH.tar.gz") && \ + tar -C /usr/bin/ -xzvf /tmp/linux_$ARCH.tar.gz && \ curl -fsSLO "$SUPERCRONIC_URL" && \ echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - && \ chmod +x "$SUPERCRONIC" && \ From a6a46ae503c9c8d87643052e9c17265a99d83abe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20Gr=C3=B6nberg?= Date: Tue, 30 Jun 2020 23:27:10 +0200 Subject: [PATCH 2/3] Use alpine base image instead of glib image. --- docker/Dockerfile | 12 +++++++++--- docker/README.md | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 517d102d8..7146b91c7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,7 +1,13 @@ -FROM gronis/alpine-glibc +FROM alpine -RUN ARCH=$(uname -m | sed 's/x86_64/amd64/g' | sed 's/aarch64/arm64/g' | sed 's/armv7l/arm/g') && \ - SUPERCRONIC_SHA1SUM=$(echo $ARCH | sed 's/amd64/5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85/g' | sed 's/arm64/e2714c43e7781bf1579c85aa61259245f56dbba1/g' | sed 's/arm/47481c3341bc3a1ae91a728e0cc63c8e6d3791ad/g') && \ +RUN \ + ARCH=$(if [ $(uname -m) == "x86_64" ] && [ $(getconf LONG_BIT) == "64" ]; then echo "amd64"; \ + elif [ $(uname -m) == "x86_64" ] && [ $(getconf LONG_BIT) == "32" ]; then echo "386"; \ + elif [ $(uname -m) == "aarch64" ]; then echo "arm64"; \ + elif [ $(uname -m) == "armv7l" ]; then echo "arm"; \ + elif [ $(uname -m) == "armv6l" ]; then echo "arm"; fi;) && \ + echo "Building for $ARCH" 1>&2 && \ + SUPERCRONIC_SHA1SUM=$(echo $ARCH | sed 's/386/e0126b0102b9f388ecd55714358e3ad60d0cebdb/g' | sed 's/amd64/5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85/g' | sed 's/arm64/e2714c43e7781bf1579c85aa61259245f56dbba1/g' | sed 's/arm/47481c3341bc3a1ae91a728e0cc63c8e6d3791ad/g') && \ SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-$ARCH && \ SUPERCRONIC=supercronic-linux-$ARCH && \ # Install SeaweedFS and Supercronic ( for cron job mode ) diff --git a/docker/README.md b/docker/README.md index 65241b517..e45d989c5 100644 --- a/docker/README.md +++ b/docker/README.md @@ -27,3 +27,10 @@ docker-compose -f seaweedfs-dev-compose.yml -p seaweedfs up cd $GOPATH/src/github.com/chrislusf/seaweedfs/docker make ``` + +## Build and push a multiarch build + +Make sure that `docker buildx` is supported. +```bash +docker buildx build --pull --push --platform linux/386,linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 . -t chrislusf/seaweedfs +``` From bad27718027b93414aad03d3c8ce4be0da800bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20Gr=C3=B6nberg?= Date: Tue, 30 Jun 2020 23:38:00 +0200 Subject: [PATCH 3/3] Update docker README with docker buildx instructions. --- docker/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docker/README.md b/docker/README.md index e45d989c5..d6e1f4928 100644 --- a/docker/README.md +++ b/docker/README.md @@ -30,7 +30,10 @@ make ## Build and push a multiarch build -Make sure that `docker buildx` is supported. +Make sure that `docker buildx` is supported (might be an experimental docker feature) ```bash +BUILDER=$(docker buildx create --driver docker-container --use) docker buildx build --pull --push --platform linux/386,linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 . -t chrislusf/seaweedfs +docker buildx stop $BUILDER ``` +