Die guten alten bind mounts. Es gibt sie genau so lange wie es Docker selbst bereits gibt. Aus diesem Grund werden die meisten von euch, die sich schon etwas länger mit Docker beschäftigen auch bereits einiges über bind mounts wissen. Trotzdem möchte ich hier noch mal vorstellen was bind mounts genau sind und was man mit diesen machen kann.
Inhaltsverzeichnis
Was sind bind mounts
Mit den sogenannten bind mounts hat man die Möglichkeit, Dateien oder Verzeichnisse des Hosts direkt in einen Docker Container einzubinden. Dabei wird die Datei / das Verzeichnis durch den vollständigen oder relativen Pfad auf dem Host referenziert.
Diese Dateien oder Verzeichnisse können auch bei Laufzeit erst durch den Container erstellt werden. Generell sind bind mounts sehr performant, allerdings ist man auf das Dateisystem des Hosts angewiesen, welches eine spezielle Struktur haben muss. Aus diesem Grund sollte man zum Beispiel für die Entwicklung von Docker Anwendungen lieber Volumes anstelle von bind mounts verwenden.
Container mit einem bind mount starten
Um einen Container mit einem bind mount zu starten, verwendet man den Parameter –mount. diesem werden dann type, source und target mitgegeben. Das ganze sieht wie folgt aus.
1 2 | docker run -d -it --name bind_test --mount type=bind,source=/tmp/data,target=/tmp redis:latest 60753ea3ee222be71c95b588d8a4eacd83b7c0b8412c64d4493b8a5dd5f0a116 |
Schauen wir uns mit docker inspect den Container an, dann finden wir im Abschnitt Mounts den übergebenen bind mount.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | "Mounts": [ { "Type": "bind", "Source": "/tmp/data", "Destination": "/tmp", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "volume", "Name": "1199fb55a6e4a69f7a58fd295012afe3aa366e1f27987705c7f7eb76aa89c9c1", "Source": "/var/lib/docker/volumes/1199fb55a6e4a69f7a58fd295012afe3aa366e1f27987705c7f7eb76aa89c9c1/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], |
Readonly mit bind mounts
Einen bind mount nur mit Leseberechtigung zu übergeben ist nicht weiter schwer und unterscheidet sich kaum von unserem vorherigen Aufruf. Dem Parameter –mount muss nur das Signalwort readonly mitgegeben werden. Das ganze sieht dann so aus:
1 2 | docker run -d -it --name bind_test --mount type=bind,source=/tmp/data,target=/tmp,readonly redis:latest beb8a1de2d118f95fb15715906051ebc95f84f51892678185cf1114369a6b4e2 |
Schauen wir uns nun den Container mit docker inspect an sehen wir im Mounts Bereich bei dem Eintrag für unseren bind, dass bei RW (Read&Write) nun false hinterlegt ist.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | "Mounts": [ { "Type": "volume", "Name": "64ce094593bb4c35e8d4f17fedf3ce751ca4642870443751091a8f8956f70ebf", "Source": "/var/lib/docker/volumes/64ce094593bb4c35e8d4f17fedf3ce751ca4642870443751091a8f8956f70ebf/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "bind", "Source": "/tmp/data", "Destination": "/tmp", "Mode": "", "RW": false, "Propagation": "rprivate" } ], |
Schreibe einen Kommentar