diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..47cc789 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +FROM rust:1.91.1-slim AS chef + +RUN apt-get update && \ + apt-get install -y musl-tools pkg-config build-essential libssl-dev && \ + rustup target add x86_64-unknown-linux-musl && \ + rm -rf /var/lib/apt/lists/* + +RUN cargo install cargo-chef && \ + cargo install sccache + +ENV RUSTC_WRAPPER=sccache \ + SCCACHE_DIR=/sccache + +WORKDIR /enginewhy + +FROM chef AS planner +COPY . . +RUN cargo chef prepare --recipe-path recipe.json + +FROM chef AS builder +COPY --from=planner /enginewhy/recipe.json recipe.json + +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + cargo chef cook --release --target x86_64-unknown-linux-musl --recipe-path recipe.json + +COPY . . +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=/usr/local/cargo/git \ + --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + cargo build --release --target x86_64-unknown-linux-musl + +# change to scratch and get comment the apk command for prod, i guess +FROM alpine:latest AS runtime +# RUN apk add --no-cache ca-certificates curl netcat-openbsd bind-tools strace +WORKDIR /enginewhy +COPY --from=builder /enginewhy/target/x86_64-unknown-linux-musl/release/l4lb /usr/bin/l4lb +ENTRYPOINT ["l4lb"] \ No newline at end of file