J'essaie d'approfondir ma compréhension du volume de Docker, et j'ai du mal à comprendre les différences / cas d'utilisation de:
- La
docker volume create
commande - le
docker run -v /path:/host_path
- L'
VOLUME
entrée dans leDockerfile
fichier
Je ne comprends particulièrement pas ce qui se passe si vous combinez l' VOLUME
entrée avec le -v
drapeau.
Réponses:
Un volume est une donnée persistante stockée dans
/var/lib/docker/volumes/...
Vous pouvez soit le déclarer dans un Dockerfile, ce qui signifie qu'à chaque fois qu'un conteneur est démarré à partir de l'image, le volume est créé ( vide ), même si vous n'avez aucune
-v
option.Vous pouvez le déclarer à l'exécution
docker run -v [host-dir:]container-dir
.la combinaison des deux (
VOLUME
+docker run -v
) signifie que vous pouvez monter le contenu d'un dossier hôte dans votre volume conservé par le conteneur dans/var/lib/docker/volumes/...
docker volume create crée un volume sans avoir à définir un Dockerfile, à créer une image et à exécuter un conteneur. Il est utilisé pour permettre rapidement à d'autres conteneurs de monter ledit volume.
Si vous aviez conservé du contenu dans un volume, mais que vous avez depuis supprimé le conteneur (qui par défaut ne supprime pas son volume associé, sauf si vous utilisez docker rm -v), vous pouvez rattacher ledit volume à un nouveau conteneur (en déclarant le même volume).
Voir « Docker - Comment accéder à un volume non attaché à un conteneur? ».
Avec la création de volume de docker, il est facile de rattacher un volume nommé à un conteneur.
la source
Dockerfile
avecVOLUME
et le-v /path:/host_path/
drapeau. Le contenu duVOLUME
testament sera remplacé par le contenu de/host_path/
?docker volume create --name my_volume
suivi d'undocker run --volume-from my_volume
, comment savez-vous où sera le point de montage?docker run ...
, comment puis-je écrire dans un fichier stocké sur lemy_volume
volume? Je ne connais pas le ... chemin? du volume à l'intérieur de mon conteneur en cours d'exécution parce que je n'ai rien défini? J'espère que je suis assez clair, car je ne suis certainement pas sûr de ma vocable: - /docker volume create --name aname
crée un volume nommé : Vous attribuez un chemin d'accès au conteneur à l'exécutiondocker run -v aname:/apath
:: ce conteneur a maintenant un volume qui lui est attaché, monté dans son dossier / apath. J'ai réécrit la réponse pour que cela soit clair.VOLUME
l'instruction devient intéressante lorsque vous la combinez avec levolumes-from
paramètre d'exécution.Compte tenu du Dockerfile suivant:
Construisez une image avec:
Et faites tourner un conteneur avec:
La première chose à noter est que vous aurez un dossier dans cette image nommé
myvolume
. Mais ce n'est pas particulièrement intéressant car lorsque nous sortirons du conteneur, le volume sera également supprimé.Créez un fichier vide dans ce dossier, alors exécutez ce qui suit dans le conteneur:
Maintenant, lancez un nouveau conteneur, mais partagez le même volume avec
my-first-bb
:Vous verrez que
my-second-bb
contient le fichierhello.txt
dans lemyvolume
dossier.Une fois que vous quittez les deux conteneurs, votre volume sera également supprimé.
la source
--rm
option. Je pense que cela pourrait fonctionner de le mentionner. Si vous n'avez pas démarré un conteneur avec--rm
, vous pouvez toujours supprimer le conteneur et ses volumes anonymes avecdocker rm -v my-container
.