diff --git a/docker/Dockerfile b/docker/Dockerfile index 1e89bfc7..b9daba08 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,33 +1,43 @@ -FROM --platform=$BUILDPLATFORM rust:latest AS base - +# for build tools +FROM --platform=$BUILDPLATFORM rust:1.85-bookworm AS tools RUN apt-get update && apt-get install -y \ build-essential \ && rm -rf /var/lib/apt/lists/* +RUN rustup toolchain install nightly-2024-09-17 \ + && rustup default nightly + +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git \ + cargo install cargo-chef --version ^0.1 +# for build base +FROM --platform=$BUILDPLATFORM rust:1.85-bookworm AS base +RUN apt-get update && apt-get install -y \ + build-essential \ + && rm -rf /var/lib/apt/lists/* RUN rustup toolchain install nightly-2024-09-17 \ && rustup default nightly -RUN cargo install sccache --version ^0.7 -RUN cargo install cargo-chef --version ^0.1 -ENV RUSTC_WRAPPER=sccache SCCACHE_DIR=/sccache +COPY --from=tools /usr/local/cargo/bin/cargo-chef /usr/local/cargo/bin/ FROM base AS planner WORKDIR /usr/src/app COPY . . RUN --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=/usr/src/app/target \ cargo chef prepare --recipe-path recipe.json FROM base AS builder +ENV SQLX_OFFLINE=true WORKDIR /usr/src/app COPY --from=planner /usr/src/app/recipe.json recipe.json RUN --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=/usr/src/app/target \ cargo chef cook --release --recipe-path recipe.json COPY . . -ENV SQLX_OFFLINE=true RUN --mount=type=cache,target=/usr/local/cargo/registry \ - --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ cargo build -r FROM debian:bookworm-slim @@ -52,4 +62,4 @@ ARG PORT ENV PORT=${PORT} EXPOSE ${PORT} -ENTRYPOINT ["/bin/sh", "-c"] \ No newline at end of file +ENTRYPOINT ["/bin/sh", "-c"]