FastAPI mit Docker bereitstellen

FastAPI mit Docker bereitstellen

Jonas Scholz - Co-Founder von sliplane.ioJonas Scholz
4 min

Ein FastAPI-Container braucht Python, deine Abhängigkeiten und einen Startbefehl. Mit diesem Dockerfile kannst du deine App lokal testen und danach deployen. Die wichtigsten Details gehen wir direkt am Beispiel durch.

Das Dockerfile

Deine App liegt hier in app/main.py und hat eine FastAPI-Instanz namens app. Leg eine requirements.txt mit deinen Abhängigkeiten ins Repository. Für den Startbefehl brauchst du fastapi[standard]: Das Paket enthält die CLI-Abhängigkeiten, die bei fastapi allein fehlen.

Dockerfile
FROM python:3.13-slim
WORKDIR /code

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

RUN useradd --create-home app
COPY ./app ./app
USER app

EXPOSE 3000
CMD ["fastapi", "run", "app/main.py", "--host", "0.0.0.0", "--port", "3000"]

Das Beispiel nutzt Python 3.13. Nimm eine noch unterstützte Python-Version, mit der deine Pakete funktionieren. Braucht ein Paket zusätzliche Systembibliotheken, installier sie im Image.

Leg neben dem Dockerfile eine .dockerignore an:

__pycache__
*.py[cod]
.venv
venv
dist
build
.git
.env
.env.*

Damit bleiben lokale virtuelle Umgebungen, Bytecode und Dateien mit Zugangsdaten aus dem Build-Kontext. Zugangsdaten gibst du beim Deployment als Umgebungsvariablen mit.

Was steckt im Dockerfile?

WORKDIR setzt das Verzeichnis für die nächsten Befehle. Zuerst kopieren wir requirements.txt, dann den App-Code. So kann Docker die installierten Pakete aus dem Cache nutzen, wenn du nur Python-Code änderst. Mit pip install --no-cache-dir bleibt der Download-Cache von pip aus dem Image.

Das letzte COPY fügt die App hinzu. Sie läuft als Benutzer app ohne Root-Rechte. Dieser Benutzer kann den Code lesen, aber nicht ändern. Muss deine App Dateien schreiben, gib ihr dafür ein eigenes Verzeichnis.

fastapi run startet den Produktionsserver. Mit --host 0.0.0.0 nimmt er Anfragen über das Container-Netzwerk an. --port 3000 passt zur Portfreigabe weiter unten. EXPOSE beschreibt den Port im Image. Den Port auf deinem Rechner gibt erst docker run -p frei.

Liegt deine App in einem anderen Modul, pass den Startbefehl an. Die FastAPI-Dokumentation zu Containern zeigt dir die Details.

Lokal bauen und starten

docker build -t fastapi-app .
docker run --rm --name fastapi-app -p 3000:3000 fastapi-app

Öffne http://localhost:3000/docs und test eine Anfrage über die API-Doku. Hast du diese Route deaktiviert, ruf eine eigene Route auf. Stoppt der Container oder antwortet er nicht, prüf die Logs mit docker logs fastapi-app in einem zweiten Terminal.

Der Befehl startet einen Serverprozess. Wie viele Prozesse oder Container du brauchst, hängt von deiner Last und dem verfügbaren RAM ab. Miss den RAM-Verbrauch eines Prozesses, bevor du weitere startest.

Auf Sliplane deployen

Committe das Dockerfile und die .dockerignore. Erstell in Sliplane einen Service aus deinem GitHub-Repository. Setz den HTTP-Port auf 3000, ergänze deine Umgebungsvariablen und starte das Deployment.

Service aus einem GitHub-Repository erstellen, hier in der damaligen Sliplane-Oberfläche

Der Screenshot stammt aus dem ursprünglichen Beitrag. Die Oberfläche kann heute anders aussehen. Du brauchst dein Repository, den Dockerfile-Pfad und den Port deiner App. Test nach dem Deployment eine API-Anfrage über die Service-URL und prüf die Logs. Sollen Dateien auch nach einem Deployment noch da sein, richte dafür persistenten Speicher ein.

Willkommen auf deiner Cloud-Plattform

Sliplane macht es einfach, deine Apps in der Cloud zu deployen und zu skalieren. Starte mit einem Container oder deinem Lieblings-Framework und wachse von da aus. Probier es jetzt aus!