knuspermagier.de
Der privateste Blog von Philipp.

Docker Volumes sind gar nicht so blöd

Ich muss ja sagen, dass ich mich langsam an Docker gewöhne. Letzten habe ich gelernt, dass Docker Volumes eigentlich ganz schlau sind. Bisher habe ich eigentlich nie welche verwendet und immer direkte Filesystem-Mounts benutzt, doch jetzt im Zuge meiner großen Server-Konsolidierung, wo ich versuche, das meiste auf Docker umzustellen, hab ich mich nochmal tiefer eingelesen und habe nun weniger gefährliches Halbwissen!

Tatsächlich kam meine Abneigung zu Volumes wahrscheinlich daher, dass sie am Anfang unter MacOS (vielleicht immer noch?) halt nicht so funktionierten, wie ich das gerne wollte — in einem Dev-System will man ja immer direkten Zugriff auf die Daten, also zumindest, wenn man PHP entwickelt. Da mussten es natürlich direkte Filesystem-Mounts sein und die waren langsam und allgemein war Docker auf dem Mac am Anfang ja eher schwierig und hat bei mir zu großer Abneigung geführt.

Nun, informierter, und in einer anderen Umgebung, ich will ja jetzt keine Dev-Umgebungen deployen, sondern… funktionierende Anwendungen, weiß ich es plötzlich zu schätzen. Alles ist etwas aufgeräumter, und sauberer. Vielleicht ist es auch noch ein wenig schneller! Das wichtigste Feature für mich ist allerdings, dass Volumes beim Start des Containers mit dem Inhalt aus dem Container vorgefüllt werden! Das finde ich ein grandioses Feature.

In meinem Post zu Kioski, meiner Homeassistant-Sonos-Steuer-App, gab ich, unwissend, noch folgenden Schnipsel zum Starten an:

touch db.sqlite
docker run -d \
 -p 127.0.0.1:9901:9901 \
 -v $(pwd)/db.sqlite:/app/database.sqlite \
 ghcr.io/pwaldhauer/kioski:latest

Mit Volumes könnte man das Touchen der Datenbank nun einfach weglassen. Er würde einfach die (leere) Datenbank aus dem Image nehmen und sie beim Initialisieren des Volumes dort hin kopieren. Nice!

Zusätzlich könnte man, wenn man wollte, die Volumes auch per NFS oder sonstwas einbinden, da gibt es tausend Möglichkeiten, die man mit den Filesystem-Mounts nicht hat. Gute Sache!