Zusammenfassung
Dieser Artikel zeigt, wie man Docker-Container mit NFS-Volumes für persistente Datenspeicherung konfiguriert. Wir verwenden Ollama als Beispielanwendung, um zu demonstrieren, wie Modelldaten auf einem Remote-Dateisystem gespeichert werden können. Der Artikel enthält eine schrittweise Anleitung zur Einrichtung, praktische Beispiele und Erklärungen zur Funktionsweise.
Einleitung
In modernen Container-Umgebungen ist die persistente Datenspeicherung ein zentrales Thema. Während Docker-Container standardmäßig nicht persistent sind, können Volumes verwendet werden, um Daten über Container-Neustarts hinweg zu erhalten. In Umgebungen mit mehreren Containern oder mehreren Hosts ist es sinnvoll, externe Speichersysteme wie Network File System (NFS) zu nutzen, um gemeinsamen Zugriff auf Daten zu gewährleisten.
NFS-Volumes in Docker ermöglichen es, Daten aus Containern auf einem zentralen NFS-Server zu speichern, was besonders nützlich ist für:
- Gemeinsame Datenspeicherung zwischen mehreren Containern
- Zentrale Backup-Strategien
- Speicherung großer Modelldaten (wie bei KI-Modellen)
- Vereinfachte Skalierung von Anwendungen
Hintergrund
Was ist NFS?
Network File System (NFS) ist ein Distributed File System-Protokoll, das es ermöglicht, Dateien über ein Netzwerk wie lokale Dateisysteme zu mounten. In Docker-Umgebungen kann man NFS-Volumes verwenden, um Daten aus Containern auf einem Remote-Dateisystem zu speichern.
Docker NFS Volumes
Docker unterstützt NFS-Volumes in docker-compose.yml Dateien direkt über den volume-Mechanismus. Die Syntax lautet:
volumes:
my-nfs-volume:
driver: local
driver_opts:
type: nfs
o: addr=my_nfs_server,rw,nolock,async,vers=4,rsize=131072,wsize=131072
device: ":/path/on/server"
Dabei wird ein NFS-Share als Volume definiert, das in Containern verwendet werden kann. Die Optionen bedeuten im Einzelnen:
my-nfs-volume– Name des Volumes, wie es dann in der docker-compose.yml Datei verwendet werden kann.driver: local– Obgleich es sich bei NFS technisch um ein Netzwerkdateisystem handelt, wird in Docker der „local“ Treiber verwendet, der eben auch NFS versteht.type: nfs– Diese Option definiert den Volume-Typ als Network File System. Ohne diese Angabe würde Docker nicht wissen, dass es sich um ein NFS-Volume handelt.addr=my_nfs_server– Gibt die IP-Adresse des NFS-Servers an, auf dem der Share gehostet wird. Diese Option ist zwingend notwendig, es ist nicht möglich, die Adresse imdeviceanzugeben.rw– Setzt das Mount-Flag auf read-write. Ohnerwwäre der Zugriff nur lesend.nolock– Deaktiviert das Locking-System des NFS. In Container-Umgebungen kann das standardmäßige Locking zu Problemen führen, da es oft nicht korrekt mit dem Container-Isolation-Modell zusammenarbeitet.nolockist oft notwendig für Docker-Container.async– Aktiviert asynchrone Schreibvorgänge. Dies verbesster die Performance, da Schreiboperationen nicht sofort bestätigt werden müssen. Es kann zu Datenverlust führen, wenn der Server abstürzt, aber verbessert die Antwortzeit signifikant.vers=4– Spezifiziert die NFS-Version 4. NFSv4 bietet bessere Sicherheit, Performance und Funktionen im Vergleich zu NFSv3. Für moderne Umgebungen ist NFSv4 die empfohlene Version.rsize=131072– Legt die maximale Lesegröße auf 128 KB fest. Dies beeinflusst die Effizienz beim Lesen von Dateien. Größere Werte können die Performance verbessern, wenn große Dateien gelesen werden.wsize=131072– Legt die maximale Schreibgröße auf 128 KB fest. Wie beirsizeverbessert dieser Wert die Performance bei großen Schreiboperationen.device: ":/path/on/server"– Diese Option definiert den NFS-Share, der gemountet werden soll. Das:am Anfang ist ein spezifisches Format für Docker NFS-Volumes, das angibt, dass der Share auf dem gleichen Server wie der Docker-Host liegt (oder über einen Standard-Server).
Praktische Umsetzung
Voraussetzungen
- Docker und Docker Compose installiert
- Zugriff auf einen NFS-Server
- Hosts mit NFS-Client-Funktionen (z. B.
nfs-commonunter Debian/Ubuntu)
Und natürlich wird ein NFS-Server benötigt. Das kann entweder ein Linux-Rechner sein oder ein NAS z.B. von Synology oder QNAP. Wir verwenden die folgenden Annahmen für den NFS-Server
- Server-Adresse: nfs-server.lan
- Exportiertes NFS Volume: /volume1/ollama-data
Docker Compose Konfiguration
Die folgende docker-compose.yml Datei wird Ollama in einem Container starten und die Modelle auf einem NFS-Mount auf einem Server verwalten:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
volumes:
# Mounte das NFS-Verzeichnis als Volume
- ollama-data:/root/.ollama
ports:
- "11434:11434"
restart: unless-stopped
volumes:
ollama-data:
driver: local
driver_opts:
type: nfs
o: addr=nfs-server.lan,rw,nolock,async,vers=4,rsize=131072,wsize=131072
device: ":/volume1/ollama-data"
Starte den Container
# Starte den Service
docker-compose up -d
# Überprüfe den Status
docker-compose ps
Fazit
Die Verwendung von NFS-Volumes in Docker bietet eine robuste Lösung für die persistente Datenspeicherung, insbesondere in Umgebungen mit mehreren Containern oder Hosts. Die Kombination mit Ollama zeigt, wie man große Modelldaten zentral speichern und wiederverwenden kann.
Vorteile:
- Zentrale Datenspeicherung
- Einfache Backup-Strategien
- Gemeinsamer Zugriff auf Daten
- Skalierbarkeit



