Files
netrunner-landing/proxy-ws/Dockerfile
T
2026-07-02 23:13:24 +07:00

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"]