Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 43 additions & 12 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,49 @@
# Cross-compile Dockerfile supporting both x86_64-unknown-linux-musl and
# aarch64-unknown-linux-musl using zig to link against musl libc.

# --- build image

FROM rust:1.90 AS builder

RUN rustup target add x86_64-unknown-linux-musl
RUN apt update && apt install -y musl-tools musl-dev
RUN rustup target add \
aarch64-unknown-linux-musl \
x86_64-unknown-linux-musl

RUN update-ca-certificates

ENV USER=app
ENV UID=10001
ENV ZIGVERSION=0.15.2

RUN wget https://ziglang.org/download/$ZIGVERSION/zig-x86_64-linux-$ZIGVERSION.tar.xz && \
tar -C /usr/local --strip-components=1 -xf zig-x86_64-linux-$ZIGVERSION.tar.xz && \
mv /usr/local/zig /usr/local/bin && \
rm zig-x86_64-linux-$ZIGVERSION.tar.xz

RUN cargo install --locked cargo-zigbuild

WORKDIR /app

COPY . .

RUN cargo zigbuild \
--release \
--target aarch64-unknown-linux-musl \
--target x86_64-unknown-linux-musl \
--bin wastebin \
--bin wastebin-ctl

RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "${UID}" \
"${USER}"
--uid "10001" \
"app"

WORKDIR /app
COPY . .
RUN cargo build --target x86_64-unknown-linux-musl --release

# --- x86_64-unknown-linux-musl final image

# --- final image

FROM scratch
FROM scratch AS amd64

COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
Expand All @@ -35,3 +53,16 @@ COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/wastebin ./
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/wastebin-ctl ./
USER app:app
CMD ["/app/wastebin"]

# --- aarch64-unknown-linux-musl final image

FROM scratch AS arm64

COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group

WORKDIR /app
COPY --from=builder /app/target/aarch64-unknown-linux-musl/release/wastebin ./
COPY --from=builder /app/target/aarch64-unknown-linux-musl/release/wastebin-ctl ./
USER app:app
CMD ["/app/wastebin"]