# Stage 1: Builder for dependencies FROM python:3.11-slim-bullseye AS builder WORKDIR /app # Install uv RUN pip install uv # Copy only dependency files first to leverage Docker cache COPY pyproject.toml ./ # Install dependencies with uv # Use 'uv pip install --system' to install directly into the system python environment # This avoids creating a virtualenv inside the Docker build stage RUN uv pip install --system . # Stage 2: Final image FROM python:3.11-slim-bullseye WORKDIR /app # Copy installed dependencies from builder # We copy the entire site-packages directory COPY --from=builder /usr/local/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/ # Also copy uv itself (optional, but good for debugging) COPY --from=builder /usr/local/bin/uv /usr/local/bin/uv # And the bin directory for executables like 'uvicorn' COPY --from=builder /usr/local/bin/ /usr/local/bin/ # Copy application code COPY server.py ./ # Expose the port Uvicorn will listen on EXPOSE 8000 # Run the Uvicorn server CMD ["python", "server.py"]