Créer un volume local avec des options de montage
Dans cette étape, vous apprendrez à créer un volume Docker local et à spécifier des options de montage. Les options de montage vous permettent de contrôler la manière dont le système de fichiers est monté, par exemple en définissant les autorisations, en activant des fonctionnalités spécifiques ou en optimisant les performances.
Nous allons créer un volume local nommé myvolume3
et utiliser l'option o
pour spécifier les options de montage. Pour cet exemple, nous allons définir les options uid
et gid
pour garantir que les fichiers créés dans le volume par un conteneur sont détenus par un utilisateur et un groupe spécifiques sur l'hôte. Cela peut être utile pour gérer les autorisations lors du partage de données entre les conteneurs et l'hôte.
Tout d'abord, créons un répertoire sur l'hôte que nous utiliserons comme source pour notre volume. Ce n'est pas strictement nécessaire pour un volume local standard, mais cela permet d'illustrer comment les options de montage peuvent affecter le système de fichiers sous - jacent.
mkdir -p ~/project/myvolumedata
Maintenant, créons le volume myvolume3
en utilisant le pilote local
et spécifions l'option o
avec uid
et gid
. Nous utiliserons l'identifiant d'utilisateur et de groupe de l'utilisateur labex
actuel. Vous pouvez trouver votre identifiant d'utilisateur et de groupe en utilisant les commandes id -u
et id -g
.
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
Décortiquons cette commande :
docker volume create
: La commande pour créer un volume.
--driver local
: Spécifie le pilote de volume local
.
--opt type=none
: Spécifie qu'aucun type de système de fichiers ne devrait être automatiquement créé. Nous effectuons un montage lié (bind mount) sur un répertoire existant.
--opt device=/home/labex/project/myvolumedata
: Spécifie le périphérique à monter, qui est le répertoire que nous avons créé sur l'hôte. Notez l'utilisation du chemin absolu /home/labex/project/myvolumedata
.
--opt o=bind,uid=$USER_ID,gid=$GROUP_ID
: Passe les options de montage.
bind
: Spécifie un montage lié (bind mount), reliant le volume au périphérique spécifié (notre répertoire hôte).
uid=$USER_ID
: Définit l'identifiant d'utilisateur pour les fichiers créés dans le volume sur l'identifiant de l'utilisateur actuel.
gid=$GROUP_ID
: Définit l'identifiant de groupe pour les fichiers créés dans le volume sur l'identifiant de groupe de l'utilisateur actuel.
myvolume3
: Le nom du volume.
Vous devriez voir le nom du volume affiché dans la console.
Maintenant, examinons le volume pour voir les options.
docker volume inspect myvolume3
Dans la sortie, vous devriez voir le Driver
indiqué comme local
, les Options
incluant type=none
, device=/home/labex/project/myvolumedata
et o=bind,uid=...,gid=...
(avec vos identifiants d'utilisateur et de groupe). Le Mountpoint
sera le même que le chemin du device
.
Ensuite, nous allons exécuter un conteneur et attacher ce volume. Nous utiliserons l'image ubuntu
et monterons myvolume3
sur /app
à l'intérieur du conteneur. Ensuite, nous créerons un fichier à l'intérieur du répertoire /app
du conteneur et vérifierons son appartenance sur l'hôte.
Tout d'abord, téléchargez l'image ubuntu
si nécessaire.
docker pull ubuntu
Maintenant, exécutez le conteneur et créez un fichier dans le volume monté.
docker run --rm -v myvolume3:/app ubuntu bash -c "echo 'Testing ownership' > /app/testfile.txt && ls -l /app/testfile.txt"
Cette commande exécute un conteneur ubuntu
, monte myvolume3
sur /app
, écrit "Testing ownership" dans /app/testfile.txt
, puis liste les détails du fichier à l'intérieur du conteneur. Vous devriez voir le fichier listé avec une appartenance root à l'intérieur du conteneur, car les conteneurs s'exécutent généralement en tant que root par défaut.
Maintenant, vérifions l'appartenance du fichier sur la machine hôte dans le répertoire ~/project/myvolumedata
.
ls -l ~/project/myvolumedata/testfile.txt
Vous devriez voir que le fichier testfile.txt
est détenu par l'utilisateur et le groupe labex
sur l'hôte, grâce aux options de montage uid
et gid
que nous avons spécifiées lors de la création du volume.
Enfin, nettoyons le répertoire créé.
rm -rf ~/project/myvolumedata