embeddings-api / Dockerfile
Andr17p's picture
first commit
67ad8b2
# syntax = docker/dockerfile:1.9-labs # ← обязательно для --mount=type=cache,link
# ────────────────────────────────────────────────
# Стадия 1 — сборка зависимостей (builder)
# ────────────────────────────────────────────────
FROM python:3.13-slim AS builder
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=off \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy \
HF_HOME=/app/hf_cache
WORKDIR /app
# Копируем только lock-файлы / requirements (самое важное!)
COPY pyproject.toml uv.lock requirements.txt* ./
# Устанавливаем uv (самый быстрый installer в 2026)
RUN --mount=type=cache,target=/root/.cache/uv \
pip install --no-cache-dir uv && \
uv sync --frozen --no-install-project --no-dev
ENV PATH="/app/.venv/bin:$PATH"
# ------------------- ЗАГРУЗКА МОДЕЛИ -------------------
# Теперь, когда зависимости установлены, скачиваем модель эмбеддингов
# (эта команда сохранит файлы в $HF_HOME)
RUN python -c "from sentence_transformers import SentenceTransformer; SentenceTransformer('deepvk/USER-bge-m3')"
# -------------------------------------------------------
# ────────────────────────────────────────────────
# Стадия 2 — финальный образ (runtime)
# ────────────────────────────────────────────────
FROM python:3.13-slim
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
HF_HOME=/app/hf_cache
WORKDIR /app
# Копируем виртуальное окружение из builder
COPY --from=builder /app/.venv /app/.venv
# Копируем папку с загруженной моделью
COPY --from=builder /app/hf_cache /app/hf_cache
# Добавляем venv в PATH
ENV PATH="/app/.venv/bin:$PATH"
# Копируем весь код (самое последнее!)
COPY . .
CMD ["python", "main.py"]