Ein aus meiner Erfahrung “running Problem” mit dem dauerhaften Betrieb von Dockeranwendungen sind persistente Docker-Volumes: Die Frage, wie man Volumes dauerhaft außerhalb des Docker-Hosts abgelegt bekommt, damit sie z.B. ge-backup-t werden können oder einen Docker-Host Neubau überstehen. Die von mir seit langem praktizierte Methode ist, dass der Docker-Host vom File-Server die Volumes mountet und diese Mounts dann in den Containern verwendet werden (-v /mnt/dockervolumes/mycontainer:/var/data/...
). Dies hat u.a. den Nachteil, dass man zum Erzeugen des Containers (im Compose-File) Infos über die Infrastruktur (den Mount-Pfad) verwenden muss. Außerdem muss beim Erzeugen des Docker-Hosts der Mount angelegt werden. Das mache ich zwar inzwischen automatisch per Ansible, ist aber nicht Standard – also meines Wissens z.B. nicht per docker-machine create
machbar.
Daher bin ich auf der Suche nach einer Lösung, die sozusagen “Docker-konform” und außerhalb des Compose-Files stattfindet. Eine Möglichkeit, auf die ich nun gestoßen bin, ist das Erzeugen von Volumes direkt auf NFS- oder CIFS-/SMB-Laufwerken. Und das habe ich so hinbekommen:
Persistente Docker-Volumes mit NFS:
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.41.28,rw \
--opt device=:/export/dockervolumes/xxtestvolumepath \
xxtestvolume
docker run -v xxtestvolume:/world busybox touch /world/xx1
docker run -v xxtestvolume:/world busybox ls /world
Persistente Docker-Volumes mit CIFS/SMB:
docker volume create \
--driver local \
--opt type=cifs \
--opt o=addr=192.168.41.28,rw \
--opt device=//192.168.41.28/xxtestvol \
--opt o=uid=0,username=smbusername,password=smbpw,nounix,file_mode=0770,dir_mode=0770 \
xxtestvolume2
docker run -v xxtestvolume2:/world busybox touch /world/xx1
docker run -v xxtestvolume2:/world busybox ls /world
Ob das nun die von mir bevorzuge und dauerhaft verwendete Methode wird, weiß ich noch nicht…
Links
https://forums.docker.com/t/docker-compose-how-to-use-nfs-volumes/23255/2
https://docs.docker.com/engine/reference/commandline/volume_create/#driver-specific-options
https://docs.docker.com/compose/compose-file/compose-file-v2/#driver
Im Dockerfile ab v2 geht das in etwa so:
Klingt Cool – Insbesondere wenn man probiert, remote Container oder Hosts via ElkarBackup (rsynk/rsnapshot) auf eine Synology DS zu sichern. Das werde ich direkt mal ausprobieren 🙂
prima. Freut mich. Berichte mal über deine Erfahrungen. Ich freue mich jederzeit über neue Ideen und Input Das Problem der persistenten volumes habe ich meines Erachtens immer noch nicht zufriedenstellend gelöst.
Hallo,
Funtioniert super!
Meine Frage nun, wie stelle ich sicher das die Verschiedenen Container nur Ihr Verzeichnis nutzen und nicht eine ebene zurück gehen?
Oder ist das bereits mit dem Eingabe des Pfades gelöst?
ALso
NAS-NFS
-Docker
— Bilder
— Media
Container welcher auf BIlder zugreift, soll nicht auf Media zugreifen können.
Die Container können nicht “außerhalb” der gemounteten Verzeichnisse zugreifen, das ist eine der Kern-Ideen. Probier es doch einfach mal aus, indem Du in so einen Container mit “docker exec … bash” reingehst und dann schaust, worauf Du so zugreifen kannst.