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.