Docker Compose für lokale KI
Was dieser Artikel über Docker Compose behandelt
- Was Docker Compose ist und wann es sinnvoll ist.
- Aufbau einer
compose.yaml. - Wie Dienste, Netzwerke und Volumes definiert werden.
- Praxisbeispiele für Ollama, Open WebUI und Datenbanken.
- Tipps für den Betrieb von lokalen KI-Stacks.
Einleitung: Docker Compose für lokale KI
Docker Compose ermöglicht es, mehrere Container in einer einzigen Datei zu beschreiben und gemeinsam zu starten. Für lokale KI-Setups ist das besonders praktisch, weil oft mehrere Dienste zusammenarbeiten: Ollama für Modelle, Open WebUI als Oberfläche, PostgreSQL mit pgvector für RAG, vielleicht noch ein Redis-Cache oder ein Webserver. Statt jeden Container einzeln zu starten, definiert man alles in compose.yaml und verwaltet den ganzen Stack mit einem Befehl.
Dieser Artikel zeigt den Aufbau von Compose-Dateien und gibt konkrete Beispiele für KI-Stacks.
Wichtige Begriffe
- Compose: Docker-Tool für Multi-Container-Anwendungen.
- compose.yaml: Konfigurationsdatei für den Stack.
- Service: Ein Container, der Teil des Stacks ist.
- Volume: Persistenter Speicher für Container.
- Network: Virtuelles Netzwerk, das Container verbindet.
- Profile: Möglichkeit, bestimmte Services optional zu starten.
- Override: Zusätzliche Compose-Datei, die Werte erweitert.
Grundaufbau einer compose.yaml
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- ollama-data:/root/.ollama
ports:
- "127.0.0.1:11434:11434"
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "127.0.0.1:8080:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama-data:
Wichtige Schlüssel
- image: Welches Image verwendet wird.
- container_name: Name des laufenden Containers.
- volumes: Mounts für persistente Daten.
- ports: Portweiterleitung vom Host in den Container.
- environment: Umgebungsvariablen.
- depends_on: Startreihenfolge festlegen.
- restart: Verhalten bei Abstürzen.
- networks: Eigene Netzwerke definieren.
Netzwerke
Standardmäßig erstellt Compose ein Netzwerk für den Stack. Container können sich dann per Servicenamen erreichen:
open-webui:
image: ghcr.io/open-webui/open-webui:main
environment:
- OLLAMA_BASE_URL=http://ollama:11434
Alternativ ein eigenes Netzwerk definieren:
networks:
ki-net:
driver: bridge
Volumes
Volumes sorgen dafür, dass Daten nach einem Containerneustart erhalten bleiben:
volumes:
ollama-data:
pg-data:
Ollama und Open WebUI
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
runtime: nvidia
volumes:
- ollama-data:/root/.ollama
ports:
- "127.0.0.1:11434:11434"
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "127.0.0.1:8080:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama-data:
Mit Datenbank für RAG
services:
postgres:
image: pgvector/pgvector:pg16
container_name: postgres
environment:
- POSTGRES_USER=rag
- POSTGRES_PASSWORD=ragpass
- POSTGRES_DB=ragdb
volumes:
- pg-data:/var/lib/postgresql/data
ports:
- "127.0.0.1:5432:5432"
restart: unless-stopped
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
- ollama-data:/root/.ollama
ports:
- "127.0.0.1:11434:11434"
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "127.0.0.1:8080:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- DATABASE_URL=postgresql://rag:ragpass@postgres:5432/ragdb
depends_on:
- ollama
- postgres
restart: unless-stopped
volumes:
ollama-data:
pg-data:
Wichtige Befehle
| Befehl | Zweck |
|---|---|
docker compose up -d | Stack im Hintergrund starten. |
docker compose down | Stack stoppen und entfernen. |
docker compose down -v | Inklusive Volumes entfernen. |
docker compose ps | Status anzeigen. |
docker compose logs -f | Logs live verfolgen. |
docker compose pull | Neueste Images laden. |
docker compose build | Images neu bauen. |
docker compose restart | Dienste neu starten. |
Umgebungsvariablen aus Datei
Secrets und Konfiguration in .env auslagern:
services:
open-webui:
env_file:
- .env
Profile
Services nur bei Bedarf starten:
services:
monitoring:
image: prom/prometheus
profiles:
- monitoring
Start:
docker compose --profile monitoring up -d
Tipps für lokale KI
- Container-Namen vergeben, um sie leichter zu erreichen.
- Nicht alles an
0.0.0.0binden, sondern127.0.0.1bevorzugen. - Volumes für Modelle, Datenbanken und Konfigurationen nutzen.
depends_onfür Startreihenfolgen sinnvoll einsetzen..env-Dateien für Secrets und Pfade verwenden.restart: unless-stoppedfür dauerhaft laufende Dienste.
Typische Stolpersteine
- YAML-Indentation: Leerzeichen statt Tabulatoren nutzen.
- Port belegt: Anderen Container oder Dienst stoppen.
- Kein Netzwerk: Container können sich nicht gegenseitig erreichen.
- GPU nicht verfügbar:
runtime: nvidiaunddeploy.resources.reservationsprüfen. - Volumes vergessen: Daten gehen nach Neustart verloren.
- Umgebungsvariablen falsch: Leerzeichen, Gleichheitszeichen und Klammern beachten.
Weiterführende Links und Infos
- BotServ.de Docker Befehle
- BotServ.de Docker Grundlagen
- BotServ.de Ollama Befehle
- BotServ.de Ollama Sicherheit
- BotServ.de Proxmox LXC vs. VM
FAQ: Docker Compose für lokale KI
Was ist der Unterschied zwischen Docker und Docker Compose? Docker verwaltet einzelne Container, Compose verwaltet mehrere zusammen.
Brauche ich Compose für Ollama allein?
Nein, ein einzelner docker run-Befehl reicht. Sobald mehrere Dienste beteiligt sind, lohnt sich Compose.
Wo liegt die compose.yaml?
Meist im Projektverzeichnis. Der Befehl docker compose up sucht im aktuellen Verzeichnis danach.
Sind Daten in Volumes sicher? Ja, wenn das Volume nicht gelöscht wird. Regelmässige Backups sind trotzdem wichtig.
Kann ich Compose mit GPU nutzen?
Ja, über runtime: nvidia oder neuere deploy.resources.reservations.devices.
Quellen und weiterführende Literatur
- Docker Compose Docs: https://docs.docker.com/compose/
- Compose Specification: https://compose-spec.io/
- Ollama Docker: https://hub.docker.com/r/ollama/ollama
Zusammenfassung: Docker Compose für lokale KI
Docker Compose ist das ideale Werkzeug, um lokale KI-Stacks aus mehreren Diensten zu orchestrieren. Mit compose.yaml lassen sich Ollama, Open WebUI, Vektordatenbanken und weitere Dienste reproduzierbar starten. Wichtig sind saubere YAML-Strukturen, Volumes für persistenz, sensible Portbindungen und sinnvolle Umgebungsvariablen. Wer Compose nutzt, spart sich lange docker run-Befehle und bekommt ein wartbares Setup.


