Ein lokales Volume mit Mount-Optionen erstellen
In diesem Schritt lernen Sie, wie Sie ein lokales Docker-Volume (Datenträger) erstellen und Mount-Optionen angeben können. Mount-Optionen ermöglichen es Ihnen, zu steuern, wie das Dateisystem gemountet wird, z. B. indem Sie Berechtigungen festlegen, bestimmte Funktionen aktivieren oder die Leistung optimieren.
Wir werden ein lokales Volume namens myvolume3
erstellen und die Option o
verwenden, um Mount-Optionen anzugeben. In diesem Beispiel werden wir die Optionen uid
und gid
festlegen, um sicherzustellen, dass Dateien, die von einem Container im Volume erstellt werden, von einem bestimmten Benutzer und einer bestimmten Gruppe auf dem Host besessen werden. Dies kann nützlich sein, um Berechtigungen zu verwalten, wenn Daten zwischen Containern und dem Host geteilt werden.
Zunächst erstellen wir ein Verzeichnis auf dem Host, das wir als Quelle für unser Volume verwenden werden. Dies ist für ein Standard-lokales Volume nicht unbedingt erforderlich, aber es hilft, zu veranschaulichen, wie Mount-Optionen das zugrunde liegende Dateisystem beeinflussen können.
mkdir -p ~/project/myvolumedata
Jetzt erstellen wir das Volume myvolume3
mit dem local
-Treiber und geben die Option o
mit uid
und gid
an. Wir verwenden die Benutzer- und Gruppen-ID des aktuellen labex
-Benutzers. Sie können Ihre Benutzer- und Gruppen-ID mit den Befehlen id -u
und id -g
ermitteln.
USER_ID=$(id -u)
GROUP_ID=$(id -g)
docker volume create --driver local --opt type=none --opt device=/home/labex/project/myvolumedata --opt o=bind,uid=$USER_ID,gid=$GROUP_ID myvolume3
Lassen Sie uns diesen Befehl analysieren:
docker volume create
: Der Befehl zum Erstellen eines Volumes.
--driver local
: Gibt den local
-Volumetreiber an.
--opt type=none
: Gibt an, dass kein Dateisystemtyp automatisch erstellt werden soll. Wir binden an ein vorhandenes Verzeichnis.
--opt device=/home/labex/project/myvolumedata
: Gibt das zu montierende Gerät an, das das von uns auf dem Host erstellte Verzeichnis ist. Beachten Sie die Verwendung des absoluten Pfads /home/labex/project/myvolumedata
.
--opt o=bind,uid=$USER_ID,gid=$GROUP_ID
: Übergibt die Mount-Optionen.
bind
: Gibt einen Bind-Mount (Verknüpfungsbereich) an, der das Volume mit dem angegebenen Gerät (unserem Host-Verzeichnis) verknüpft.
uid=$USER_ID
: Setzt die Benutzer-ID für Dateien, die im Volume erstellt werden, auf die ID des aktuellen Benutzers.
gid=$GROUP_ID
: Setzt die Gruppen-ID für Dateien, die im Volume erstellt werden, auf die Gruppen-ID des aktuellen Benutzers.
myvolume3
: Der Name des Volumes.
Sie sollten den Namen des Volumes in der Konsole sehen.
Nun untersuchen wir das Volume, um die Optionen anzuzeigen.
docker volume inspect myvolume3
In der Ausgabe sollten Sie sehen, dass der Driver
auf local
gesetzt ist und die Options
type=none
, device=/home/labex/project/myvolumedata
und o=bind,uid=...,gid=...
(mit Ihren Benutzer- und Gruppen-IDs) enthalten. Der Mountpoint
wird der gleiche wie der device
-Pfad sein.
Als Nächstes führen wir einen Container aus und binden dieses Volume an ihn. Wir verwenden das ubuntu
-Image und montieren myvolume3
in das Verzeichnis /app
innerhalb des Containers. Dann erstellen wir eine Datei im Verzeichnis /app
des Containers und überprüfen ihre Besitzverhältnisse auf dem Host.
Zuerst laden Sie das ubuntu
-Image herunter, wenn erforderlich.
docker pull ubuntu
Jetzt führen Sie den Container aus und erstellen eine Datei im gemounteten Volume.
docker run --rm -v myvolume3:/app ubuntu bash -c "echo 'Testing ownership' > /app/testfile.txt && ls -l /app/testfile.txt"
Dieser Befehl führt einen ubuntu
-Container aus, bindet myvolume3
an /app
, schreibt "Testing ownership" in /app/testfile.txt
und listet dann die Dateidetails innerhalb des Containers auf. Sie sollten sehen, dass die Datei innerhalb des Containers als Eigentum von root aufgelistet wird, da Container standardmäßig typischerweise als root ausgeführt werden.
Jetzt überprüfen wir die Besitzverhältnisse der Datei auf dem Host-Rechner im Verzeichnis ~/project/myvolumedata
.
ls -l ~/project/myvolumedata/testfile.txt
Sie sollten sehen, dass die Datei testfile.txt
auf dem Host vom labex
-Benutzer und der labex
-Gruppe besessen wird, dank der uid
- und gid
-Mount-Optionen, die wir beim Erstellen des Volumes angegeben haben.
Abschließend bereinigen wir das erstellte Verzeichnis.
rm -rf ~/project/myvolumedata