#################################################################################################### ## Builder #################################################################################################### FROM rust:latest AS builder RUN rustup target add x86_64-unknown-linux-musl RUN apt update && apt install -y musl-tools musl-dev RUN update-ca-certificates # Create appuser ENV USER=small-rust ENV UID=10001 RUN adduser \ --disabled-password \ --gecos "" \ --home "/nonexistent" \ --shell "/sbin/nologin" \ --no-create-home \ --uid "${UID}" \ "${USER}" WORKDIR /app COPY ./ . RUN cargo build --target x86_64-unknown-linux-musl --release #################################################################################################### ## Final image #################################################################################################### FROM scratch # Import from builder. COPY --from=builder /etc/passwd /etc/passwd COPY --from=builder /etc/group /etc/group WORKDIR /app # Copy our build COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/small-rust ./ # Use an unprivileged user. USER small-rust:small-rust CMD ["/app/small-rust"] #################################################################################################### ## Alternatively use this builder (image size actually bigger) #################################################################################################### #FROM rust:1-alpine3.19 AS builder # #RUN rustup update nightly; rustup default nightly; # ## Create appuser #ENV USER=small-rust #ENV UID=10001 # #RUN adduser \ # --disabled-password \ # --gecos "" \ # --home "/nonexistent" \ # --shell "/sbin/nologin" \ # --no-create-home \ # --uid "${UID}" \ # "${USER}" # #RUN apk add --no-cache musl-dev # #WORKDIR /app # #COPY ./ /app # #RUN cargo build --release #