0Pricing
Learn AI with Python · Lektion

ML-Modelle mit Docker containerisieren

Multi-Stage-Dockerfile, CUDA-Basis-Images, COPY von Modellartefakten, Health-Endpunkte.

ML-Modelle mit Docker containerisieren ist eine kostenlose Learn AI with Python-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn AI with Python-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn AI with Python-Kurs umfasst insgesamt 4 Lektionen.

Warum Sie ML-Modelle containerisieren sollten

Machine-Learning-Modelle hängen von einer bestimmten Python-Version, Systembibliotheken und festgelegten Paketversionen ab. Docker bündelt all dies in einem einzigen unveränderlichen Image, sodass das Modell auf einem Laptop, einem CI-Runner und in einem Produktions-Cluster identisch ausgeführt wird.

Bei ML ist die Abweichung von Abhängigkeiten das größte Problem: Ein Modell, das mit numpy 1.24 trainiert wurde, kann sich mit numpy 2.0 unbemerkt fehlerhaft verhalten. Ein Container fixiert diese Versionen.

Das naive einstufige Image

Beim ersten Versuch wird alles in einer einzigen Stage installiert. Das funktioniert zwar, aber Build-Tools (Compiler, Caches und Header-Dateien für die Entwicklung) gelangen dadurch in das finale Image, wodurch es größer wird und eine größere Angriffsfläche bietet.

FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]

Multi-Stage-Builds: Die Idee

Ein Multi-Stage-Build verwendet eine Stage zum Kompilieren und Installieren von Abhängigkeiten (den Builder) und kopiert anschließend nur die fertigen Artefakte in eine saubere finale Stage. Werkzeuge, die nur zum Erstellen benötigt werden, gelangen nie in die Produktion.

  • Builder-Stage: vollständiges Basis-Image, führt pip install aus
  • Finale Stage: schlankes Basis-Image, kopiert die installierten Pakete

Builder-Stage: pip install

Der Builder installiert Pakete in ein bekanntes Präfix, damit sie einfach kopiert werden können. Mit --user werden sie unter /root/.local abgelegt – in einem einzigen Verzeichnis, das wir später übernehmen können.

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

Die schlanke finale Stage

Die finale Stage beginnt mit python:3.11-slim und kopiert die installierten Pakete aus dem Builder. Im schlanken Image fehlen die Build-Toolchains, wodurch die Image-Größe um mehrere hundert Megabyte sinkt.

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .

Kopieren von Modellgewichten

Große Modellgewichte sollten als eigene Ebene kopiert werden, damit Docker sie zwischenspeichern kann. Wenn sich nur Ihr Code ändert, wird die Gewichtebene wiederverwendet und das erneute Erstellen geht schnell.

COPY model/ /app/model/
COPY src/ /app/src/

Serving-Port mit EXPOSE deklarieren

Inferenzserver (FastAPI, Triton, TorchServe) lauschen an einem Port. EXPOSE 8000 dokumentiert, dass der Container Dienste auf Port 8000 bereitstellt. Der Port wird dadurch nicht selbst veröffentlicht; zur Laufzeit müssen Sie ihn weiterhin mit -p 8000:8000 zuordnen.

EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

Grundlagen zu HEALTHCHECK

Orchestratoren müssen wissen, ob der Modellserver noch aktiv ist. Eine HEALTHCHECK-Anweisung führt in einem bestimmten Intervall einen Befehl aus. Ein Rückgabewert ungleich null markiert den Container als fehlerhaft, sodass er neu gestartet oder aus dem Load Balancer entfernt werden kann.

HEALTHCHECK mit curl

Ein häufig verwendetes Muster ruft einen schlanken /health-Endpunkt auf. curl -f bricht bei jedem HTTP-Fehler mit einem Exit-Code ungleich null ab – genau das erwartet HEALTHCHECK.

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

Ein minimaler Health-Endpunkt

Ihre Serving-Anwendung sollte einen schnellen Endpunkt bereitstellen, der bestätigt, dass das Modell geladen ist, ohne eine vollständige Inferenz auszuführen.

from fastapi import FastAPI

app = FastAPI()
model = None  # loaded at startup

@app.get("/health")
def health():
    return {"status": "ok", "model_loaded": model is not None}

Das vollständige Dockerfile

Alles zusammen ergibt: Eine Builder-Stage installiert die Abhängigkeiten, eine schlanke finale Stage kopiert sie zusammen mit dem Modell, veröffentlicht Port 8000 und definiert einen Health-Check.

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]

Kurzer Test

Testen Sie Ihr Verständnis von Multi-Stage-Builds.

Zusammenfassung

Sie haben gelernt, ein ML-Modell mit einem produktionsreifen Dockerfile zu containerisieren:

  • Multi-Stage-Build: Die Builder-Stage installiert die Abhängigkeiten, die schlanke finale Stage kopiert sie
  • EXPOSE 8000 dokumentiert den Serving-Port
  • HEALTHCHECK CMD curl ermöglicht es Orchestratoren, ausgefallene Container zu erkennen
  • Gewichte als eigene cachebare Ebene kopieren

Als Nächstes stellen Sie ein containerisiertes Modell bei einem verwalteten Cloud-Service bereit.

Häufig gestellte Fragen

Ist die Lektion „ML-Modelle mit Docker containerisieren“ kostenlos?

Ja — der vollständige Text von „ML-Modelle mit Docker containerisieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn AI with Python-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn AI with Python-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „ML-Modelle mit Docker containerisieren“?

Multi-Stage-Dockerfile, CUDA-Basis-Images, COPY von Modellartefakten, Health-Endpunkte. Du übst Learn AI with Python mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Learn AI with Python zu starten?

Keine Vorkenntnisse erforderlich. Learn AI with Python auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „ML-Modelle mit Docker containerisieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Learn AI with Python-Lektion Code schreiben und ausführen?

Ja. Jede Learn AI with Python-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. ML-Modelle mit Docker containerisieren
  2. Cloud-Deployment: AWS SageMaker
  3. Hochperformantes Serving mit Triton Inference Server
  4. Modell-Endpunkte skalieren und automatisch skalieren
← Zurück zu Learn AI with Python