ARG RUST_IMAGE=rust:1.95.0-slim-bookworm@sha256:d7482085ff5b415f84dba5647ae71606650bdef00db7aeb69f4b3d170c3e4082 ARG RUNTIME_IMAGE=gcr.io/distroless/cc-debian12:nonroot@sha256:9dac0a79194e45a7da0158a9c6da57b217585af0786db3845d1f0ec1a0dd182f FROM ${RUST_IMAGE} AS build WORKDIR /src # Dependencies (cached) COPY Cargo.toml Cargo.lock ./ RUN mkdir src && echo 'fn main() {}' > src/main.rs && touch src/lib.rs && \ cargo build --release --locked && \ rm -rf src COPY src src COPY templates templates RUN touch src/main.rs src/lib.rs && cargo build --release --locked FROM ${RUNTIME_IMAGE} WORKDIR /app COPY --from=build /src/target/release/reverie-logs /app/reverie-logs COPY web/public /app/web/public # Large buffers (log content, rendered pages) are mmapped so their memory goes back to the # system when a request ends, instead of staying in glibc's per-thread arenas ENV MALLOC_ARENA_MAX=2 \ MALLOC_MMAP_THRESHOLD_=131072 USER nonroot EXPOSE 80 ENTRYPOINT ["/app/reverie-logs"]