Support multi-arch Docker builds
This commit is contained in:
32
Dockerfile
32
Dockerfile
@@ -1,16 +1,40 @@
|
|||||||
FROM rust:1-bookworm AS builder
|
FROM --platform=$BUILDPLATFORM rust:1-bookworm AS builder
|
||||||
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install --no-install-recommends -y build-essential ca-certificates \
|
&& apt-get install --no-install-recommends -y \
|
||||||
|
build-essential ca-certificates \
|
||||||
|
gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu \
|
||||||
|
libc6-dev-arm64-cross libc6-dev-amd64-cross \
|
||||||
|
linux-libc-dev-arm64-cross linux-libc-dev-amd64-cross \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
ARG TARGETARCH
|
||||||
COPY Cargo.toml Cargo.lock ./
|
COPY Cargo.toml Cargo.lock ./
|
||||||
COPY migrations ./migrations
|
COPY migrations ./migrations
|
||||||
COPY src ./src
|
COPY src ./src
|
||||||
COPY tests ./tests
|
COPY tests ./tests
|
||||||
|
|
||||||
RUN cargo build --release --locked
|
RUN case "$TARGETARCH" in \
|
||||||
|
amd64) \
|
||||||
|
rust_target=x86_64-unknown-linux-gnu; \
|
||||||
|
linker=x86_64-linux-gnu-gcc; \
|
||||||
|
;; \
|
||||||
|
arm64) \
|
||||||
|
rust_target=aarch64-unknown-linux-gnu; \
|
||||||
|
linker=aarch64-linux-gnu-gcc; \
|
||||||
|
;; \
|
||||||
|
*) \
|
||||||
|
echo "unsupported TARGETARCH=$TARGETARCH" >&2; \
|
||||||
|
exit 1; \
|
||||||
|
;; \
|
||||||
|
esac \
|
||||||
|
&& rustup target add "$rust_target" \
|
||||||
|
&& env "CARGO_TARGET_$(printf '%s' "$rust_target" | tr '[:lower:]-' '[:upper:]_')_LINKER=$linker" \
|
||||||
|
CC="$linker" \
|
||||||
|
cargo build --release --locked --target "$rust_target" \
|
||||||
|
&& mkdir -p /out \
|
||||||
|
&& cp "target/$rust_target/release/kosync-rs" /out/kosync-rs
|
||||||
|
|
||||||
FROM debian:bookworm-slim
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
@@ -19,7 +43,7 @@ RUN apt-get update \
|
|||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& useradd --system --uid 10001 --home-dir /data --create-home kosync
|
&& useradd --system --uid 10001 --home-dir /data --create-home kosync
|
||||||
|
|
||||||
COPY --from=builder /src/target/release/kosync-rs /usr/local/bin/kosync-rs
|
COPY --from=builder /out/kosync-rs /usr/local/bin/kosync-rs
|
||||||
|
|
||||||
USER kosync
|
USER kosync
|
||||||
WORKDIR /data
|
WORKDIR /data
|
||||||
|
|||||||
Reference in New Issue
Block a user