📚 Docker pour les débutants : Le Chantier Naval

6.2 : Bind Mounts (./data:/var/lib/mysql) : Le lien direct avec vos dossiers locaux

📄 Article ⏱ 3 ✅ Gratuit

Maintenant que nous avons vu que les données à l’intérieur d’un conteneur disparaissent par défaut, il est temps de découvrir la première façon de persister vos données : les Bind Mounts.

Un Bind Mount permet de lier un dossier de votre machine hôte à un dossier à l’intérieur du conteneur. Tout ce que vous écrivez dans le conteneur est directement visible sur votre machine, et inversement. C’est comme une fenêtre ouverte entre votre conteneur et votre système.

Comment ça fonctionne ?

Lorsque vous lancez un conteneur avec un Bind Mount, vous précisez un chemin sur votre machine locale et un chemin à l’intérieur du conteneur.

Exemple avec MariaDB :

docker run -d \
--name mariadb \
-e MYSQL_ROOT_PASSWORD=secret \
-v ./data:/var/lib/mysql \
mariadb:latest

Ici :

  • ./data est un dossier sur votre ordinateur (ou serveur)
  • /var/lib/mysql est le dossier où MariaDB stocke ses bases de données à l’intérieur du conteneur
  • Le -v (volume) fait le lien entre les deux

Schéma simplifié :

HÔTE : ./data


CONTENEUR : /var/lib/mysql

Tout ce que MariaDB écrit dans /var/lib/mysql se retrouve automatiquement dans ./data sur votre machine.

✅ Avantages des Bind Mounts

  • Vos données sont immédiatement accessibles depuis votre système hôte.
  • Vous pouvez éditer ou sauvegarder les fichiers directement sans passer par Docker.
  • Idéal pour le développement, où l’on veut souvent inspecter les fichiers ou logs d’une application.

⚠️ Limitations à connaître

  • La structure des fichiers sur l’hôte doit être compatible avec l’application : certains conteneurs ne créent pas automatiquement les dossiers requis.
  • Les permissions peuvent poser problème selon le système (Linux vs Windows vs Mac).
  • Moins sécurisé : vos données sensibles sont exposées sur le système hôte.
  • Déploiement moins portable : si vous déplacez votre projet sur un autre serveur, il faudra copier le dossier local.

Exemple concret

Si vous créez un fichier directement dans le conteneur :

docker exec -it mariadb bash
touch /var/lib/mysql/fichier-test.txt

Vous le retrouverez instantanément dans votre dossier ./data sur l’hôte :

ls ./data
fichier-test.txt

Et inversement, si vous ajoutez un fichier dans ./data, MariaDB le « voit » immédiatement dans son dossier /var/lib/mysql.


🧠 À retenir

Le Bind Mount est la solution simple et directe pour persister vos données en développement. Il offre un accès immédiat à vos fichiers depuis l’hôte, mais pour les environnements de production, on privilégiera plutôt les Named Volumes, que nous verrons dans la section suivante

📝 Note de l’auteur

Pour ma part, malgré certains inconvénients (permissions, portabilité, sécurité), je préférez cette solution. Elle permet un accès direct aux fichiers, ce qui est très pratique pour le développement, le debug et la sauvegarde rapide.