Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
technique:docker:admin:bindmount-to-volume [2020/10/13 19:17] – ↷ Page déplacée de technique:adminsys:docker:bindmount-to-volume à technique:docker:admin:bindmount-to-volume qduchemitechnique:docker:admin:bindmount-to-volume [2020/10/14 15:53] (Version actuelle) qduchemi
Ligne 1: Ligne 1:
 +{{indexmenu_n>60}}
 # Passer d'un bind mount à un volume Docker # Passer d'un bind mount à un volume Docker
  
-Il est préférable d'utiliser des volumes Docker plutôt que des bind mounts. On pourra retrouver l'ensemble des informations concernant ces notions sur la [documentation officielle](https://docs.docker.com/storage/volumes/).+## Préambule
  
-En effet, les bind mounts posent certains problèmes :+Pour stocker les données des services, on [[technique:docker:good_practices:storage|préfère utiliser les volumes Docker]].
  
-Il ne sont pas gérés dans `/var/lib/docker`, ce qui peut poser des problèmes de stockage (ce dossier correspond à une partition entière, avec sa taille spécialement choisie) +<bootnote>En particulier, les bind mounts ne sont pas idéaux pour les données : 
-* Le comportement des bind mount n'est pas constant quand un dossier non-vide de l'hôte est monté sur un dossier non-vide du conteneur. +   Ils dépendent d'un chemin spécifique et ne sont pas dans la partition allouée à Docker 
-* Docker Compose gère automatiquement le cycle de vie des volumes Docker. +   * Le comportement des bind mount n'est pas constant quand un dossier non-vide de l'hôte est monté sur un dossier non-vide du conteneur. 
-* Il est facile de vérifier la liste de tous les volumes Docker. +   * Docker Compose gère automatiquement le cycle de vie des volumes Docker. 
-* ...+   * Il est facile de vérifier la liste de tous les volumes Docker. 
 +</bootnote>
  
-La procédure est assez simple. Pour cet exemple, on va supposer la situation suivante : 
  
-* Un service monte le dossier `/data` (hôte) sur `/content` (conteneur).+Pour cette exemple, on va supposer la situation suivante : 
 + 
 +* Un service monte le dossier `/old_data` (hôte) sur `/content` (conteneur).
 * On veut plutôt utiliser un volume Docker appelé `data`. * On veut plutôt utiliser un volume Docker appelé `data`.
  
-Voici comment procéder :+## Procédure
  
-1. Arrêter le conteneur dans lequel est monté le dossier+### Arrêter le conteneur 
-2. Créer le volume `data+ 
 +On ne peut pas migrer les données pendant que le conteneur tourne, car elles sont susceptibles d'être modifiées
 + 
 +<bootnote>On utilise indifféremment `docker stopou `docker-compose stop`.</bootnote> 
 + 
 +### Création du volume
  
 ``` ```
 docker volume create data docker volume create data
 ``` ```
-3Lancer un conteneur "idiot" qui monte le nouveau volume + 
 +### Monter le volume 
 + 
 +Il est plus facile de copier les données dans le volume si ce dernier est monté dans un conteneur. 
 +On crée donc un conteneur qui ne fait rien et qui monte le volume `data` sur le dossier `/dumb`.
  
 ``` ```
 docker run -v data:/dumb --name dumb busybox true docker run -v data:/dumb --name dumb busybox true
 ``` ```
-4Copier les données (notez le `/.` important pour copier le contenu du dossier seulement).+ 
 +<bootnote>`busybox` est une très petite image Docker contenant quelques utilisateurs GNUOn lance la commande `true`, qui ne fait rien. Le conteneur s'éteint, mais on a pas besoin qu'il soit vivant.</bootnote> 
 + 
 +<bootnote>On pourrait tout aussi bien copier directement les données dans `/var/lib/docker/volumes/data/_data`, qui est le "vrai" chemin du volume, mais cela nécessite les accès `root` et c'est un peu moins propre.</bootnote> 
 + 
 +### Copier les données 
 + 
 +La commande `docker cp` permet de copier des dossiers entre conteneurs ou depuis l'hôte.  
 +On va donc copier les données du dossier `data` de l'hôte vers le dossier `/dumb` du conteneur `dumb`.
  
 ``` ```
-docker cp -a /data/. dumb:/dumb+# Remplace /old_data par le dossier concerné 
 +docker cp -a /old_data/. dumb:/dumb
 ``` ```
-5. Arrêter le conteneur "idiot"+ 
 +<bootnote warning>Notez le `/.`, essentiel après le nom du dossier, pour ne copier que son contenu!</bootnote> 
 + 
 +### Arrêter le conteneur de copie
  
 ``` ```
 docker stop dumb && docker rm dumb docker stop dumb && docker rm dumb
 ``` ```
-6. Modifier le point de montage (dans le Docker Compose par exemple) : `/data:/contentdevient `data:/content`. Il ne faut pas oublier, dans ce cas, de déclarer `data` comme volume, par exemple :+ 
 +### Modifier le point de montage 
 + 
 +On remplacera tout simplement `/data_old(chemin d'un dossier sur l'hôte) par `data` (nom d'un volume). 
 + 
 +Si on utilise Compose, il ne faut pas oublier de déclarer `data` comme volume, par exemple :
  
 ```yaml ```yaml
Ligne 54: Ligne 83:
 ``` ```
  
-Suite à ces modifications, vous pouvez redémarrer le conteneur. Les données sont restaurées et sont maintenant gérées dans un volume Docker.+### Redémarrage du conteneur 
 + 
 +Suite à ces modifications, vous pouvez redémarrer le conteneur initial. Les données sont restaurées et sont maintenant gérées dans un volume Docker. 
 + 
 +<bootnote>On utilisera indifféremment `docker start` ou `docker-compose start`.</bootnote>
  • technique/docker/admin/bindmount-to-volume.1602609425.txt.gz
  • de qduchemi