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
|
||||
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/*
|
||||
|
||||
ARG TARGETARCH
|
||||
COPY Cargo.toml Cargo.lock ./
|
||||
COPY migrations ./migrations
|
||||
COPY src ./src
|
||||
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
|
||||
|
||||
@@ -19,7 +43,7 @@ RUN apt-get update \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& 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
|
||||
WORKDIR /data
|
||||
|
||||
Reference in New Issue
Block a user