41 lines
1.6 KiB
Docker
41 lines
1.6 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM rust:alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# Ставим нужные зависимости для компиляции C++ (нужно для tokenizers)
|
|
RUN apk add --no-cache musl-dev g++ make
|
|
|
|
# Сначала копируем ТОЛЬКО файлы манифестов
|
|
COPY Cargo.toml Cargo.lock ./
|
|
|
|
# Создаем фейковый main.rs и компилируем ЗАВИСИМОСТИ.
|
|
# Кэшируем скачанные крейты и скомпилированные объектные файлы!
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
|
--mount=type=cache,target=/app/target \
|
|
mkdir src && echo "fn main() {}" > src/main.rs && \
|
|
cargo build --release && \
|
|
rm -R src
|
|
|
|
# Теперь копируем реальный код
|
|
COPY . .
|
|
|
|
# Компилируем ТВОЙ код.
|
|
# Докер снова подтянет папку target из кэша. Зависимости собираться НЕ БУДУТ.
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
|
--mount=type=cache,target=/app/target \
|
|
cargo build --release && \
|
|
cp target/release/proxy-ws /tmp/proxy-ws
|
|
|
|
# Финальный легкий образ: только бинарник + модели, без Rust-тулчейна и
|
|
# компиляторов из стадии builder — итоговый образ занимает минимум места.
|
|
FROM alpine:latest
|
|
WORKDIR /app
|
|
|
|
RUN apk add --no-cache ca-certificates
|
|
|
|
# Копируем готовый бинарник и модели
|
|
COPY --from=builder /tmp/proxy-ws ./proxy-ws
|
|
COPY ./models ./models
|
|
|
|
EXPOSE 3001
|
|
CMD ["./proxy-ws"] |