Files
mf-fitter/Dockerfile
2024-12-28 05:01:10 +00:00

59 lines
1.3 KiB
Docker

FROM rust:1.75-slim-bullseye as builder
# Install build dependencies
RUN apt-get update && \
apt-get install -y \
pkg-config \
libssl-dev \
libpq-dev \
gcc \
g++ \
make \
clang \
lld \
libomp-dev \
libopenblas-dev \
&& rm -rf /var/lib/apt/lists/*
# Create a new empty project
WORKDIR /app
# Create a dummy project to cache dependencies
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && \
echo "fn main() {println!(\"dummy\")}" > src/main.rs && \
cargo build --release && \
rm -rf src
# Now copy the real source code
COPY . .
# Build the application in release mode with cargo cache
RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/app/target \
cargo build --release && \
cp target/release/mf-fitter /app/mf-fitter
# Create the runtime image
FROM debian:bullseye-slim
# Install runtime dependencies
RUN apt-get update && \
apt-get install -y \
libpq5 \
ca-certificates \
libomp5 \
libopenblas0 \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# Copy the binary from builder
COPY --from=builder /app/mf-fitter /usr/local/bin/
COPY --from=builder /app/.env.example /app/.env
WORKDIR /app
# Set environment variables
ENV RUST_LOG=info
ENTRYPOINT ["/usr/local/bin/mf-fitter"]