diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1783eec --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +/target +.history/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e2a9812 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +ARG RUST_TAG=1.94.1-alpine3.23 +FROM rust:${RUST_TAG} AS builder + +ARG BUILD_BASE_VERSION=0.5-r3 +RUN --mount=type=cache,sharing=locked,target=/var/cache/apk \ + apk add --update build-base=${BUILD_BASE_VERSION} + +ARG CMAKE_VERSION=4.1.3-r0 +RUN --mount=type=cache,sharing=locked,target=/var/cache/apk \ + apk add --update cmake=${CMAKE_VERSION} + +ARG PROTOC_VERSION=31.1-r1 +RUN --mount=type=cache,sharing=locked,target=/var/cache/apk \ + apk add --update protoc=${PROTOC_VERSION} + +RUN \ + # This one would be nice if it worked: + # --mount=type=bind,source=.,target=/root/app \ + # Use this one if there's a hard to track down "read-only filesystem" error: + --mount=type=bind,source=.,target=/root/app,rw \ + + # --mount=type=bind,source=./target,target=/root/app/target,rw \ + --mount=type=cache,sharing=private,target=/root/app/target \ + # --mount=type=cache,sharing=private,target=/root/app/target,uid=1000,gid=1000 \ + --mount=type=cache,target=/usr/local/cargo/git/db \ + --mount=type=cache,target=/usr/local/cargo/registry/ \ + cd /root/app && \ + cargo build --release && \ + cp target/release/fomo-reducer /root/program + +FROM scratch AS runner + +COPY --from=builder /root/program /program + +ENTRYPOINT ["/program"]