Skip to content

Commit 49bd69b

Browse files
committed
Fix #29: revamp Dockerfile to support both x86_64 and aarch64
1 parent 2068fee commit 49bd69b

File tree

1 file changed

+43
-12
lines changed

1 file changed

+43
-12
lines changed

Dockerfile

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,49 @@
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

36
FROM 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+
712
RUN 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

1234
RUN 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

3048
COPY --from=builder /etc/passwd /etc/passwd
3149
COPY --from=builder /etc/group /etc/group
@@ -35,3 +53,16 @@ COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/wastebin ./
3553
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/wastebin-ctl ./
3654
USER app:app
3755
CMD ["/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

Comments
 (0)