From 69a5e61cebe1afdebc5d753f72758f7dd78e4051 Mon Sep 17 00:00:00 2001 From: clsx524 Date: Sun, 21 Mar 2021 00:11:59 -0700 Subject: [PATCH] support arm64 build --- README.md | 19 +++++++++++++++++++ dockerfile-plus/Dockerfile | 13 ++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a0d7a45..a9860f0 100644 --- a/README.md +++ b/README.md @@ -78,3 +78,22 @@ $ cargo build ```bash $ docker build -f dockerfile-plus/Dockerfile . ``` + +### Creating multi-arch build +- Enable Experiment in docker config. Add {"experimental": true} to docker daemon.json +- Setup BuildKit local build container +``` +docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +docker buildx create --name multiarch --driver docker-container --use +docker buildx inspect --bootstrap +``` +- Run following to start multi-arch build +``` +docker buildx build \ +--platform linux/arm64/v8,linux/amd64 \ +--tag edrevo/dockerfile-plus:latest \ +-f dockerfile-plus/Dockerfile \ +--load ## or --push to push DockerHub \ +. +``` + diff --git a/dockerfile-plus/Dockerfile b/dockerfile-plus/Dockerfile index e0bc2b9..0d9a8b1 100644 --- a/dockerfile-plus/Dockerfile +++ b/dockerfile-plus/Dockerfile @@ -1,19 +1,22 @@ # syntax = docker/dockerfile:1.2.1 - -FROM clux/muslrust:stable as builder +FROM rust:latest as builder USER root WORKDIR /rust-src COPY . /rust-src +RUN apt update && apt upgrade -y && apt install -y gcc-x86-64-linux-gnu gcc-aarch64-linux-gnu + +RUN rustup target add "$(uname -m)-unknown-linux-musl" + RUN --mount=type=cache,target=/rust-src/target \ --mount=type=cache,target=/root/.cargo/git \ --mount=type=cache,target=/root/.cargo/registry \ - ["cargo", "build", "--release", "--target", "x86_64-unknown-linux-musl", "-p", "dockerfile-plus"] + cargo build --release --target "$(uname -m)-unknown-linux-musl" -p dockerfile-plus --verbose RUN --mount=type=cache,target=/rust-src/target \ - ["cp", "/rust-src/target/x86_64-unknown-linux-musl/release/dockerfile-plus", "/usr/local/bin/dockerfile-plus"] + cp "/rust-src/target/$(uname -m)-unknown-linux-musl/release/dockerfile-plus" /usr/local/bin/dockerfile-plus FROM docker/dockerfile:1.2.1 COPY --from=builder /usr/local/bin/dockerfile-plus /usr/local/bin/dockerfile-plus -ENTRYPOINT ["/usr/local/bin/dockerfile-plus"] \ No newline at end of file +ENTRYPOINT ["/usr/local/bin/dockerfile-plus"]