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