L' VOLUME
instruction 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 VOLUME
est 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 Mounts
section il y a un Source
qui représente l'emplacement du répertoire sur l'hôte, et un Destination
qui 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' VOLUME
instruction dans votre Dockerfile.
docker run -v $host_path:$container_path
: Cela vous permet d'effectuer un montage $host_path
depuis votre hôte vers $container_path
votre 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_path
et $container_path
doivent être des chemins absolus.
docker run -v my_volume:$container_path
: Cela crée un volume de données dans votre conteneur à $container_path
et 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 ADD
ou COPY
de votre Dockerfile. C'est ce que j'utilise habituellement pour un déploiement hors développement.
COPY
àADD
. Ils sont presque les mêmes, maisADD
ont des capacités supplémentaires pour les URL et les fichiers d'archive qui peuvent être surprenantes.