L' VOLUMEinstruction crée un volume de données dans votre conteneur Docker au moment de l'exécution. Le répertoire fourni en tant qu'argument VOLUMEest un répertoire qui contourne le système de fichiers Union et est principalement utilisé pour les données persistantes et partagées.
Si vous exécutez docker inspect <your-container>, vous verrez dans la Mountssection il y a un Sourcequi représente l'emplacement du répertoire sur l'hôte, et un Destinationqui représente l'emplacement du répertoire monté dans le conteneur. Par exemple,
"Mounts": [
{
"Name": "fac362...80535",
"Source": "/var/lib/docker/volumes/fac362...80535/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Voici 3 cas d'utilisation pour docker run -v:
docker run -v /data: Cela revient à spécifier l' VOLUMEinstruction dans votre Dockerfile.
docker run -v $host_path:$container_path: Cela vous permet d'effectuer un montage $host_pathdepuis votre hôte vers $container_pathvotre conteneur pendant l'exécution. En développement, cela est utile pour partager du code source sur votre hôte avec le conteneur. En production, cela peut être utilisé pour monter des éléments tels que les informations DNS de l'hôte (trouvées dans /etc/resolv.conf) ou des secrets dans le conteneur. Inversement, vous pouvez également utiliser cette technique pour écrire les journaux du conteneur dans des dossiers spécifiques sur l'hôte. Les deux $host_pathet $container_pathdoivent être des chemins absolus.
docker run -v my_volume:$container_path: Cela crée un volume de données dans votre conteneur à $container_pathet le nomme my_volume. C'est essentiellement la même chose que de créer et de nommer un volume à l'aide de docker volume create my_volume. Nommer un volume comme celui-ci est utile pour un volume de données de conteneur et un volume de stockage partagé à l'aide d'un pilote de stockage multi-hôte comme Flocker .
Notez que l'approche consistant à monter un dossier hôte en tant que volume de données n'est pas disponible dans Dockerfile. Pour citer la documentation du docker ,
Remarque: Ceci n'est pas disponible à partir d'un Dockerfile en raison de sa portabilité et de son objectif de partage. Comme le répertoire hôte est, de par sa nature, dépendant de l'hôte, un répertoire hôte spécifié dans un Dockerfile ne fonctionnera probablement pas sur tous les hôtes.
Désormais, si vous souhaitez copier vos fichiers dans des conteneurs dans des environnements sans développement, vous pouvez utiliser les instructions ADDou COPYde votre Dockerfile. C'est ce que j'utilise habituellement pour un déploiement hors développement.
COPYàADD. Ils sont presque les mêmes, maisADDont des capacités supplémentaires pour les URL et les fichiers d'archive qui peuvent être surprenantes.