1+ # Cross-compile Dockerfile supporting both x86_64-unknown-linux-musl and
2+ # aarch64-unknown-linux-musl using zig to link against musl libc.
3+
14# --- build image
25
36FROM rust:1.90 AS builder
47
5- RUN rustup target add x86_64-unknown-linux-musl
6- RUN apt update && apt install -y musl-tools musl-dev
8+ RUN rustup target add \
9+ aarch64-unknown-linux-musl \
10+ x86_64-unknown-linux-musl
11+
712RUN update-ca-certificates
813
9- ENV USER=app
10- ENV UID=10001
14+ ENV ZIGVERSION=0.15.2
15+
16+ RUN wget https://ziglang.org/download/$ZIGVERSION/zig-x86_64-linux-$ZIGVERSION.tar.xz && \
17+ tar -C /usr/local --strip-components=1 -xf zig-x86_64-linux-$ZIGVERSION.tar.xz && \
18+ mv /usr/local/zig /usr/local/bin && \
19+ rm zig-x86_64-linux-$ZIGVERSION.tar.xz
20+
21+ RUN cargo install --locked cargo-zigbuild
22+
23+ WORKDIR /app
24+
25+ COPY . .
26+
27+ RUN cargo zigbuild \
28+ --release \
29+ --target aarch64-unknown-linux-musl \
30+ --target x86_64-unknown-linux-musl \
31+ --bin wastebin \
32+ --bin wastebin-ctl
1133
1234RUN adduser \
1335 --disabled-password \
1436 --gecos "" \
1537 --home "/nonexistent" \
1638 --shell "/sbin/nologin" \
1739 --no-create-home \
18- --uid "${UID} " \
19- "${USER} "
40+ --uid "10001 " \
41+ "app "
2042
21- WORKDIR /app
22- COPY . .
23- RUN cargo build --target x86_64-unknown-linux-musl --release
2443
44+ # --- x86_64-unknown-linux-musl final image
2545
26- # --- final image
27-
28- FROM scratch
46+ FROM scratch AS amd64
2947
3048COPY --from=builder /etc/passwd /etc/passwd
3149COPY --from=builder /etc/group /etc/group
@@ -35,3 +53,16 @@ COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/wastebin ./
3553COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/wastebin-ctl ./
3654USER app:app
3755CMD ["/app/wastebin" ]
56+
57+ # --- aarch64-unknown-linux-musl final image
58+
59+ FROM scratch AS arm64
60+
61+ COPY --from=builder /etc/passwd /etc/passwd
62+ COPY --from=builder /etc/group /etc/group
63+
64+ WORKDIR /app
65+ COPY --from=builder /app/target/aarch64-unknown-linux-musl/release/wastebin ./
66+ COPY --from=builder /app/target/aarch64-unknown-linux-musl/release/wastebin-ctl ./
67+ USER app:app
68+ CMD ["/app/wastebin" ]
0 commit comments