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.

En effet, les bind mounts posent certains problèmes :

  • 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)
  • 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.
  • 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.

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).
  • On veut plutôt utiliser un volume Docker appelé data.

Voici comment procéder :

  1. Arrêter le conteneur dans lequel est monté le dossier.
  2. Créer le volume data :
docker volume create data

3. Lancer un conteneur “idiot” qui monte le nouveau volume :

docker run -v data:/dumb --name dumb busybox true

4. Copier les données (notez le /. important pour copier le contenu du dossier seulement).

docker cp -a /data/. dumb:/dumb

5. Arrêter le conteneur “idiot” :

docker stop dumb && docker rm dumb

6. Modifier le point de montage (dans le Docker Compose par exemple) : /data:/content devient data:/content. Il ne faut pas oublier, dans ce cas, de déclarer data comme volume, par exemple :

snippet.yaml
volumes:
  data:
    name: "data"

services:
  mon_service:
    [...]
    volumes:
      - data:/content
    [...]

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.

  • technique/docker/admin/bindmount-to-volume.1602609425.txt.gz
  • de qduchemi