Docker Grundlagen: Container für KI-Services
Was dieser Artikel über Docker behandelt
- Was Docker ist und warum es für KI-Services praktisch ist
- Wie Container, Images, Volumes und docker-compose zusammenhängen
- Wie Du Docker auf Linux, macOS und Windows installierst
- Wie Du einen ersten Container startest und Daten persistent hältst
- Welche Stolpersteine Anfänger erwarten und wie Du sie vermeidest
Einleitung: Docker verständlich erklärt
Docker hat die Art, wie Software installiert und betrieben wird, grundlegend verändert. Statt jedes Programm manuell mit all seinen Abhängigkeiten einzurichten, verpackst Du es in einen Container, der alles Nötige enthält. Das gilt besonders für KI-Services, die oft komplexe Abhängigkeiten haben, spezifische Python-Versionen brauchen und sich nicht immer sauber installieren lassen.
Wenn Du lokale KI betreiben willst, kommst Du an Docker kaum vorbei. Ob Ollama, Open WebUI oder eine Vektordatenbank wie Chroma, fast jeder KI-Service bietet ein fertiges Docker-Image an. Du lädst es herunter, startest den Container und der Dienst läuft, ohne dass Du Dich um Bibliotheken, Pfade oder Konflikte kümmern musst.
Dieser Artikel führt Dich durch die Docker-Grundlagen, die Du für KI-Services brauchst. Du lernst die wichtigsten Begriffe, installierst Docker, startest Deinen ersten Container und verstehst, wie Volumes und docker-compose funktionieren. Am Ende baust Du Ollama als praktisches Beispiel mit docker-compose auf.
Mehr zum Thema Self-Hosting findest Du in der Self-Hosting Übersicht.
Warum brauche ich Docker?
Stell Dir vor, Du willst Ollama auf Deinem Server installieren. Ohne Docker musst Du mehrere Schritte durchlaufen. Du installierst die richtigen C-Bibliotheken, sicherstellst, dass die Python-Version passt, richtest einen Systemdienst ein, konfigurierst Pfade für Modelle und hoffst, dass nichts mit anderen Programmen kollidiert. Wenn Du Ollama später aktualisieren oder entfernen willst, bleiben oft Reste zurück, die Du manuell aufräumen musst.
Mit Docker reicht ein einziger Befehl:
docker run -d -p 11434:11434 -v ollama-data:/root/.ollama ollama/ollama
Das war alles. Docker lädt das Image herunter, startet den Container und Ollama läuft isoliert vom Rest Deines Systems. Willst Du es aktualisieren, pullst Du das neueste Image und startest neu. Willst Du es entfernen, stoppst Du den Container und löschst ihn. Keine Reste, keine Konflikte, keine manuelle Aufräumarbeit.
Docker löst ein zentrales Problem: Es funktioniert auf meinem Rechner, aber auf Deinem nicht. Ein Container enthält genau die Bibliotheken und Einstellungen, die das Programm braucht, unabhängig vom Host-System. Wenn der Container auf Deinem Server läuft, läuft er auch auf einem anderen Server, auf einem NAS oder in der Cloud.
Docker kurz erklärt
Docker funktioniert wie Containerschiffe. Bevor es standardisierte Container gab, musste jede Fracht individuell verladen werden. Säcke, Fässer, Kisten, jedes Stück brauchte eine eigene Behandlung. Mit genormten Containern änderte sich das. Jeder Container hat die gleichen Abmaße, passt auf jedes Schiff und lässt sich mit dem gleichen Kran verladen. Die Fracht darin ist egal, der Container sorgt für Kompatibilität.
Docker macht das Gleiche für Software. Statt jedes Programm individuell auf dem System einzurichten, verpackst Du es in einen genormten Container. Der Container enthält das Programm, seine Bibliotheken, seine Konfiguration und seine Abhängigkeiten. Docker sorgt dafür, dass der Container auf jedem System läuft, das Docker installiert hat. Das Programm darin merkt nicht, ob es auf Linux, macOS oder Windows läuft, es sieht nur seine eigene isolierte Umgebung.
Für wen ist dieser Artikel gedacht?
Dieser Artikel richtet sich an Anfänger, die Docker noch nicht oder nur oberflächlich kennen. Du musst kein Linux-Experte sein, aber Du solltest grundlegende Terminal-Kenntnisse mitbringen. Wenn Du schon mal einen Befehl im Terminal ausgeführt und eine Datei mit einem Texteditor bearbeitet hast, reicht das.
Du bist hier richtig, wenn Du KI-Services wie Ollama oder Open WebUI selbst hosten willst und Dich fragst, was dieses Docker eigentlich ist. Du bist auch richtig, wenn Du Docker schon mal ausprobiert hast, aber Volumes, docker-compose und Port Mapping noch nicht ganz verstanden hast.
Wenn Du bereits Docker kennst und gezielt GPU-Support suchst, wechsle direkt zum Artikel GPU-Unterstützung in Docker.
Wichtige Begriffe
| Begriff | Bedeutung |
|---|---|
| Docker | Plattform, die Anwendungen in Containern isoliert ausführt |
| Container | Laufende Instanz eines Images, isoliert vom Host-System |
| Image | Vorlage für Container, enthält alle Dateien und Einstellungen |
| Volume | Persistenter Speicher, der Daten über den Container-Lebenszyklus hinaus sichert |
| docker-compose | Tool, um mehrere Container über eine YAML-Datei zu definieren und zu starten |
| Port Mapping | Weiterleitung eines Host-Ports an den Container, damit Dienste von außen erreichbar sind |
| Dockerfile | Textdatei mit Anweisungen zum Erstellen eines eigenen Images |
| Registry | Ablageort für Images, beispielsweise Docker Hub |
| Layer | Schicht eines Images, jede Anweisung im Dockerfile erzeugt einen Layer |
| Network | Virtuelles Netzwerk, über das Container miteinander kommunizieren |
Docker installieren
Docker läuft auf Linux nativ. Auf macOS und Windows nutzt Du Docker Desktop, das eine virtuelle Maschine im Hintergrund startet.
Linux
Auf Linux installierst Du Docker am besten über das offizielle Installationsskript. Auf Ubuntu und anderen Debian-basierten Distributionen funktioniert das so:
curl -fsSL https://get.docker.com | sudo sh
Danach fügst Du Deinen Nutzer zur Docker-Gruppe hinzu, damit Du Docker-Befehle ohne sudo ausführen kannst:
sudo usermod -aG docker $USER
Melde Dich einmal ab und wieder an, damit die Änderung wirksam wird. Prüfe die Installation mit:
docker --version
macOS
Auf macOS lädst Du Docker Desktop von der offiziellen Website herunter und installierst es wie eine normale Anwendung. Starte Docker Desktop und warte, bis das Wal-Icon in der Menüleiste stabil ist. Danach funktionieren alle docker-Befehle im Terminal.
Auf Macs mit Apple Silicon nutzt Docker Desktop automatisch die ARM-Architektur. Achte darauf, dass Du Images pullst, die für ARM verfügbar sind. Viele offizielle Images bieten mittlerweile linux/arm64-Varianten an.
Windows
Auf Windows installierst Du ebenfalls Docker Desktop. Voraussetzung ist WSL2, das Windows Subsystem for Linux. Docker Desktop richtet WSL2 automatisch ein, wenn es noch nicht vorhanden ist. Nach der Installation funktionieren alle Docker-Befehle in PowerShell oder CMD.
GPU-Support auf Windows funktioniert mit WSL2 und einem Nvidia-Treiber, der WSL2 unterstützt. Mehr dazu im Artikel GPU-Unterstützung in Docker.
Erste Schritte
Nach der Installation teste, ob Docker korrekt läuft. Der klassische erste Befehl ist:
docker run hello-world
Docker lädt ein kleines Test-Image herunter und führt es aus. Wenn Du eine Willkommensnachricht siehst, funktioniert Docker. Falls ein Berechtigungsfehler auftritt, hast Du Deinen Nutzer vermutlich noch nicht zur Docker-Gruppe hinzugefügt oder Dich nicht neu angemeldet.
Zeige alle laufenden Container an:
docker ps
Mit -a siehst Du auch gestoppte Container:
docker ps -a
Zeige alle Images, die Du heruntergeladen hast:
docker images
Diese drei Befehle, docker run, docker ps und docker images, decken die wichtigsten Aktionen ab. Du startest Container, prüfst ihren Status und siehst, welche Images lokal verfügbar sind.
Volumes und Daten
Container sind vergänglich. Wenn Du einen Container löschst, sind alle Daten darin verloren. Für KI-Services ist das ein Problem, weil Modelle groß sind und Du sie nicht bei jedem Neustart neu herunterladen willst.
Volumes lösen dieses Problem. Ein Volume ist ein persistenter Speicher, der unabhängig vom Container existiert. Du bindest ihn in den Container ein, und alle Daten, die der Container dort schreibt, bleiben erhalten, auch wenn Du den Container löschst und neu erstellst.
Ein Volume in einen Container einbinden:
docker run -d --name ollama -p 11434:11434 -v ollama-data:/root/.ollama ollama/ollama
Der Parameter -v ollama-data:/root/.ollama erstellt ein benanntes Volume namens ollama-data und bindet es im Container unter /root/.ollama ein. Dort speichert Ollama seine Modelle. Wenn Du den Container löschst und neu startest, sind die Modelle noch da.
Zeige alle Volumes an:
docker volume ls
Lösche ein Volume, das Du nicht mehr brauchst:
docker volume rm ollama-data
Alternativ zu benannten Volumes kannst Du Bind Mounts nutzen. Dabei bindest Du ein konkretes Verzeichnis auf dem Host-System in den Container ein:
docker run -d --name ollama -p 11434:11434 -v /home/user/ollama:/root/.ollama ollama/ollama
Bind Mounts geben Dir direkten Zugriff auf die Dateien auf dem Host, was für Backups und Inspektion praktisch ist. Benannte Volumes werden von Docker verwaltet und sind für die meisten Anwendungsfälle die einfachere Wahl.
docker-compose
Wenn Du nur einen Container betreibst, reicht docker run aus. Sobald Du aber mehrere Dienste kombinierst, beispielsweise Ollama und Open WebUI, wird die Befehlszeile lang und unübersichtlich. Hier kommt docker-compose ins Spiel.
docker-compose ist ein Tool, mit dem Du Container in einer YAML-Datei beschreibst. Statt langer Befehle schreibst Du eine docker-compose.yml und startest alles mit einem einzigen Befehl.
Ein einfaches Beispiel:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama-data:/root/.ollama
restart: unless-stopped
volumes:
ollama-data:
Starte das Setup mit:
docker compose up -d
Stoppen und entfernen:
docker compose down
Das -d startet die Container im Hintergrund. Ohne -d laufen sie im Vordergrund und Du siehst die Logs direkt im Terminal, was beim Debuggen hilft.
docker-compose hat mehrere Vorteile. Deine Konfiguration liegt als Datei vor, die Du versionieren, teilen und auf einem anderen Rechner nachbauen kannst. Du definierst mehrere Dienste in einer Datei, und docker-compose vernetzt sie automatisch, sodass sie miteinander kommunizieren können. Du musst Dir keine langen docker run-Befehle merken.
Beispiel: Ollama mit Docker
Ollama ist ein idealer Einstieg in KI-Services mit Docker. Es ist beliebt, hat ein offiziell gepflegtes Image und funktioniert sowohl auf CPU als auch mit GPU. In diesem Beispiel baust Du Ollama mit docker-compose auf, inklusive Persistenz und automatischem Neustart.
Schritt 1: Verzeichnis anlegen
Erstelle ein Verzeichnis für Dein Docker-Setup:
mkdir ~/ollama-docker
cd ~/ollama-docker
Schritt 2: docker-compose.yml erstellen
Erstelle eine Datei namens docker-compose.yml mit folgendem Inhalt:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama-data:/root/.ollama
restart: unless-stopped
volumes:
ollama-data:
Schritt 3: Container starten
Starte den Container:
docker compose up -d
Docker lädt das Image herunter, falls es noch nicht lokal vorhanden ist, und startet den Container. Prüfe den Status:
docker ps
Du solltest einen Container namens ollama sehen, der läuft.
Schritt 4: Modell laden
Lade ein Modell in den laufenden Container:
docker exec -it ollama ollama pull llama3
Danach starte das Modell:
docker exec -it ollama ollama run llama3
Der interaktive Chat öffnet sich. Mit /bye beendest Du die Sitzung.
Schritt 5: API testen
Prüfe, ob die API erreichbar ist:
curl http://localhost:11434/
Wenn Du Ollama is running als Antwort erhältst, funktioniert alles. Mehr zur API und zur Kombination mit anderen Tools findest Du im Artikel Ollama mit Docker.
Wenn Du Ollama mit GPU betreiben willst, ergänze die docker-compose.yml um die GPU-Konfiguration. Details dazu findest Du im Artikel GPU-Unterstützung in Docker.
Typische Stolpersteine
Permission denied beim Ausführen von Docker-Befehlen. Du hast Deinen Nutzer nicht zur Docker-Gruppe hinzugefügt. Führe sudo usermod -aG docker $USER aus und melde Dich neu an. Danach funktionieren Docker-Befehle ohne sudo.
Daten verschwinden nach Container-Neustart. Du hast kein Volume eingebunden. Ohne -v speichert der Container alle Daten in seinem eigenen Dateisystem, das beim Löschen des Containers verloren geht. Nutze immer ein Volume für Daten, die erhalten bleiben sollen.
Port ist bereits belegt. Wenn der Port, den Du mappen willst, bereits von einem anderen Programm genutzt wird, startet der Container nicht. Prüfe mit sudo lsof -i :11434, welcher Prozess den Port belegt, und stoppe ihn oder wähle einen anderen Port.
Container startet sofort wieder neu. Wenn ein Container direkt nach dem Start abstürzt, liegt das oft an einem Konfigurationsfehler. Schau Dir die Logs an mit docker logs containername. Meistens zeigt die Fehlermeldung genau, was schiefgelaufen ist.
Image ist nicht für die richtige Architektur verfügbar. Auf Macs mit Apple Silicon oder ARM-Servern kann es passieren, dass ein Image nur für x86_64 verfügbar ist. Docker versucht dann, es zu emulieren, was extrem langsam ist oder gar nicht funktioniert. Prüfe, ob das Image eine linux/arm64-Variante anbietet.
docker-compose-Befehl funktioniert nicht. Ältere Versionen nutzen docker-compose mit Bindestrich, neuere docker compose als Subcommand. Beide funktionieren, aber wenn Du eine aktuelle Docker-Version hast, nutze docker compose.
Festplatte läuft voll. Jedes Image und jeder Container belegt Speicher. Alte Images und gestoppte Container sammeln sich mit der Zeit an. Bereinige mit docker system prune, was alle ungenutzten Images, Container und Netzwerke entfernt.
Hardware, Kosten und Sicherheit
Docker selbst ist kostenlos und Open Source. Docker Desktop ist für private Nutzung kostenlos, für größere Unternehmen gibt es Lizenzbedingungen, die Du prüfen solltest. Die Hardware-Anforderungen hängen davon ab, was Du in den Containern betreibst. Docker selbst braucht wenig Ressourcen, aber KI-Services wie Ollama brauchen ausreichend RAM und idealerweise eine GPU.
Sicherheitstechnisch solltest Du einige Punkte beachten. Container sind isoliert, aber nicht automatisch sicher. Öffne keine Ports ungeschützt ins Internet, nutze stattdessen einen Reverse-Proxy mit Authentifizierung. Ziehe nur Images aus vertrauenswürdigen Quellen, idealerweise offizielle Images oder verifizierte Publisher auf Docker Hub. Lese bei inoffiziellen Images das Dockerfile, bevor Du es nutzt, besonders wenn es sensible Daten verarbeitet.
Mehr zum sicheren Betrieb von Self-Hosting-Setups findest Du im Artikel Sicherer Betrieb.
Weiterführende Links
- Self-Hosting Übersicht für den Einstieg ins Thema
- Ubuntu als Basis für Docker-Server
- GPU-Unterstützung in Docker für GPU-Konfiguration
- Ollama mit Docker für ein vollständiges Ollama-Setup
- Open WebUI als Benutzeroberfläche für Ollama
- Sicherer Betrieb für Sicherheit beim Self-Hosting
FAQ: Docker Grundlagen
Was ist der Unterschied zwischen Docker und einer virtuellen Maschine?
Eine virtuelle Maschine emuliert ein komplettes Betriebssystem mit eigenem Kernel. Ein Docker-Container nutzt den Kernel des Host-Systems und enthält nur die Anwendung und ihre Abhängigkeiten. Container sind deshalb leichter und starten schneller als virtuelle Maschinen.
Brauche ich Linux, um Docker zu nutzen?
Nein. Docker läuft auf Linux nativ, auf macOS und Windows nutzt Du Docker Desktop, das eine virtuelle Maschine im Hintergrund startet. Die Docker-Befehle sind auf allen Plattformen identisch.
Was ist der Unterschied zwischen einem Image und einem Container?
Ein Image ist eine statische Vorlage, die alle Dateien und Einstellungen enthält. Ein Container ist eine laufende Instanz eines Images. Du kannst aus einem Image beliebig viele Container starten.
Sind Daten in einem Container sicher?
Nein, nicht automatisch. Wenn Du einen Container löschst, sind die Daten darin verloren. Nutze Volumes, um Daten persistent zu speichern, damit sie auch nach dem Löschen und Neuerstellen des Containers erhalten bleiben.
Was kostet Docker?
Docker Engine und docker-compose sind Open Source und kostenlos. Docker Desktop ist für private Nutzung und kleine Unternehmen kostenlos, für größere Unternehmen gibt es Lizenzbedingungen.
Kann ich Docker ohne Internet nutzen?
Ja, nachdem Du alle benötigten Images heruntergeladen hast. Das Pullen von Images braucht Internet, aber das Starten und Stoppen von Containern funktioniert offline.
Was ist der Unterschied zwischen docker-compose und Kubernetes?
docker-compose ist für einzelne Hosts gedacht und definiert mehrere Container in einer YAML-Datei. Kubernetes ist ein Cluster-Orchestrierer für große Setups über mehrere Maschinen hinweg. Für Self-Hosting reicht docker-compose in der Regel aus.
Wie aktualisiere ich einen Container?
Pull das neueste Image mit docker pull imagename, stoppe den laufenden Container, entferne ihn und starte ihn neu. Wenn Du ein Volume nutzt, bleiben Deine Daten erhalten. Mit docker-compose reicht docker compose pull gefolgt von docker compose up -d.
Kann ich mehrere Container auf dem gleichen Port laufen lassen?
Nein, nicht auf dem gleichen Host-Port. Jeder Port kann nur einmal gebunden werden. Du kannst aber verschiedene Host-Ports nutzen und alle auf den gleichen Container-Port mappen, beispielsweise -p 11435:11434 für den zweiten Container.
Was ist ein Dockerfile?
Ein Dockerfile ist eine Textdatei mit Anweisungen zum Erstellen eines eigenen Images. Du definierst darin, welches Basis-Image genutzt wird, welche Dateien kopiert werden und welche Befehle beim Start ausgeführt werden. Für die Nutzung fertiger Images brauchst Du kein eigenes Dockerfile.
Wie sehe ich die Logs eines Containers?
Mit docker logs containername siehst Du die Ausgabe des Containers. Mit docker logs -f containername folgen die Logs live, was beim Debuggen hilft.
Quellen
- Docker offizielle Dokumentation
- Docker Hub
- docker-compose Spezifikation
- Ollama Docker Hub Repository
- NVIDIA Container Toolkit Dokumentation


