# syntax=docker/dockerfile:1.20 ARG PY_IMAGE=docker.io/python:3.12-slim # Stage 1: Builder FROM ${PY_IMAGE} AS builder RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl git \ && rm -rf /var/lib/apt/lists/* COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ WORKDIR /app ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONOPTIMIZE=2 \ UV_COMPILE_BYTECODE=1 \ UV_LINK_MODE=copy \ UV_PROJECT_ENVIRONMENT=/opt/venv COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev --no-cache --group ml # Stage 2: ML Runtime FROM ${PY_IMAGE} AS ml RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PYTHONOPTIMIZE=2 \ PATH="/opt/venv/bin:$PATH" \ PYTHONPATH="/app:$PYTHONPATH" WORKDIR /app COPY --from=builder /opt/venv /opt/venv COPY ./src/ ./ EXPOSE 8081 CMD [ "/opt/venv/bin/ml_api_cli", "/app/config.toml" ]