Skip to content
BotServBotServ
DockerComposeOllamaOpen WebUIKI-Agent

Docker Compose für lokale KI

Docker Compose für Ollama, Open WebUI, Datenbanken und KI-Agenten. YAML, Netzwerke, Volumes und Beispiele.

S

schutzgeist

3 min read
Docker Compose für lokale KI

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

BefehlZweck
docker compose up -dStack im Hintergrund starten.
docker compose downStack stoppen und entfernen.
docker compose down -vInklusive Volumes entfernen.
docker compose psStatus anzeigen.
docker compose logs -fLogs live verfolgen.
docker compose pullNeueste Images laden.
docker compose buildImages neu bauen.
docker compose restartDienste 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.0 binden, sondern 127.0.0.1 bevorzugen.
  • Volumes für Modelle, Datenbanken und Konfigurationen nutzen.
  • depends_on für Startreihenfolgen sinnvoll einsetzen.
  • .env-Dateien für Secrets und Pfade verwenden.
  • restart: unless-stopped fü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: nvidia und deploy.resources.reservations prüfen.
  • Volumes vergessen: Daten gehen nach Neustart verloren.
  • Umgebungsvariablen falsch: Leerzeichen, Gleichheitszeichen und Klammern beachten.

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

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.

Zurück zum KI Blog
Share:

Ähnliche Beiträge