# 1. Basis-Image (entspricht pyproject.toml) FROM python:3.12-slim # 2. Setze den Arbeitsordner WORKDIR /app # 3. Installiere uv (dies ist das einzige Paket, das wir mit pip installieren müssen) # uv ist für die Installation der anderen Pakete notwendig RUN pip install --no-cache-dir uv # 4. Kopiere nur die Konfigurationsdatei für den Installationsschritt # Das nutzt den Docker Build Cache, wenn sich nur der Code ändert. COPY pyproject.toml . # 5. Installiere die Abhängigkeiten aus der pyproject.toml mit uv # Der Punkt '.' bedeutet "installiere die Abhängigkeiten für das aktuelle Verzeichnis, # welches die pyproject.toml enthält". --system ist gut im Container. RUN uv pip install --system . # 6. Kopiere den Rest des Codes (inkl. main.py) COPY . . # 7. Expose Port (optional, da der Port im CMD-Befehl gebunden wird, aber gute Doku) EXPOSE 80 # 8. Starte die Anwendung beim Container-Start (CMD, nicht RUN!) # Wir nutzen Gunicorn als Master-Prozess und starten es direkt. # Der 'uv run'-Befehl ist hier nicht notwendig, da gunicorn bereits über 'uv pip install' # im Systempfad installiert wurde. CMD ["gunicorn", "main:app", "--bind", "0.0.0.0:80", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker"]