# ── Build stage ────────────────────────────────────────────────────────────── FROM rust:1-slim AS builder WORKDIR /build # Cache dependency compilation separately from application code. COPY Cargo.toml Cargo.lock build.rs ./ # Dummy source so `cargo build` can compile dependencies without the real code. RUN mkdir src && echo 'fn main(){}' > src/main.rs \ && cargo build --release \ && rm src/main.rs # Build the real application. COPY src ./src COPY migrations ./migrations # Touch main.rs so Cargo detects the change and recompiles. RUN touch src/main.rs \ && cargo build --release # ── Runtime stage ───────────────────────────────────────────────────────────── FROM debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=builder /build/target/release/mikebase ./mikebase COPY migrations ./migrations EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ CMD curl -f http://localhost:3000/health || exit 1 ENTRYPOINT ["./mikebase"]