template-rust-axum/Dockerfile
2025-04-15 21:40:36 -04:00

54 lines
1.6 KiB
Docker

# ── Javascript ──────────────────────────────────────────────────────────
FROM docker.io/oven/bun:1 AS bun
WORKDIR /usr/src/app
# install dependencies into temp directory
# this will cache them and speed up future builds
FROM bun AS js-deps
COPY package.json bun.lock /temp/dev/
RUN cd /temp/dev && bun install --frozen-lockfile
# ── Rust ────────────────────────────────────────────────────────────────
FROM rust:slim AS builder
WORKDIR /app
# Create appuser in builder as the scratch image can't do it
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid 10001 \
appuser
COPY . .
COPY --from=js-deps /usr/local/bin/bun /usr/local/bin/bun
COPY --from=js-deps /temp/dev/node_modules node_modules
RUN --mount=type=cache,target=/app/target/ \
--mount=type=cache,target=/usr/local/cargo/git/db \
--mount=type=cache,target=/usr/local/cargo/registry/ \
cargo build --locked --release \
&& mv target/release/compendium /tmp/compendium
FROM gcr.io/distroless/cc AS runner
COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
ENV RUST_LOG="compendium=debug,info"
WORKDIR /app
COPY --from=builder --chown=appuser:appuser /tmp/compendium /app/compendium
EXPOSE 3000
USER appuser:appuser
CMD ["/app/compendium"]