web-dev-qa-db-fra.com

Quel est le but de VOLUME dans Dockerfile

J'essaie d'approfondir ma compréhension du volume de Docker et j'ai du mal à comprendre les différences/cas d'utilisation de:

  • Le docker volume create commande
  • Le docker run -v /path:/Host_path
  • L'entrée VOLUME dans le fichier Dockerfile

Je ne comprends surtout pas ce qui se passe si vous combinez l'entrée VOLUME avec l'entrée -v drapeau.

Si quelqu'un a bien compris, expliquez-moi!

70
radium226

Un volume est une donnée persistante stockée dans /var/lib/docker/volumes/...

  • Vous pouvez le déclarer dans un fichier Docker, ce qui signifie qu'à chaque démarrage d'un conteneur à partir de l'image, le volume est créé ( vide ), même si vous je n'ai pas de -v option.

  • Vous pouvez le déclarer au moment de l'exécution docker run -v [Host-dir:]container-dir .
    combinant les deux (VOLUME + docker run -v) signifie que vous pouvez monter le contenu d’un dossier Hôte sur votre volume persistant par le conteneur dans /var/lib/docker/volumes/...

  • docker volume create crée un volume sans avoir à définir un fichier Docker, à construire une image et à exécuter un conteneur. Il est utilisé pour permettre à d’autres conteneurs de monter rapidement ce volume.

Si vous avez conservé du contenu dans un volume, mais que vous avez depuis supprimé le conteneur (qui par défaut ne supprime pas le 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 d'un volume dans le menu fixe, il est facile de rattacher un volume nommé à un conteneur.

docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer

# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!
49
VonC