Docker

Créer des Volumes Docker avec NFS sur votre Synology

Docker est connue pour permettre un déploiement rapide sur n’importe quel hôte. En effet, son système de Volume permet le déploiement sans se soucier de l’arborescence de fichiers de son hôte. Cependant, saviez-vous que vous pouvez créer un Volume Docker via NFS ?

Résumer NFS & Volume Docker

Avant de commencer le déploiement de votre premier Volume NFS. Faisons un point sur ces deux technologies.

NFS « Network File System » est un protocole permettant à une machine d’accéder à de fichier d’un Serveur à travers un réseau. La technologie est très similaire à SMB utilisé sous Windows. NFS contrairement à SMB est beaucoup utilisé sur les systèmes Linux.

Le Volume Docker n’est pas à confondre avec le Bind Mount, j’ai déjà écrit à ce sujet ici. Ce qu’il faut savoir c’est qu’à là création d’un Volume Docker sous Linux est par défaut stocker dans le répertoire /var/lib/docker/volumes.

Pourquoi utiliser les volumes NFS ?

En matière de gestion de stockage de son infrastructure, c’est jamais simple, surtout s’il on souhaite mettre en place la stratégie 3,2,1 pour la sauvegarde de ces données. La bonne pratique pour faciliter la mise en place de cette stratégie est de centraliser ces données.

Le parfait candidat selon moi est votre NAS. D’une part, le NAS permet une haute disponibilité de son stockage grâce aux technologies RAID. D’autre part un NAS dans l’immense majorité des cas dispose de toutes des technologies de stockage via le réseau : SMB, NFS, FTP, rsync …

Le NAS peut être fait maison avec du matériel de récup et un OS adéquat (Open Media Vault, TrueNAS) mais aussi il peut être sous forme de machine propriétaire : Synology, QNAP.

Dans cet article mon serveur NFS sera un NAS Synology. Je rappelle que tout comme docker, l’hôte du serveur NFS n’a pas d’importance. La procédure reste la même !

Configuration du NAS Synology

Pour cette démo je possède deux machines :

  • Un NAS Synology en 192.168.20.11
  • Un Hôte docker sous debian en 192.168.20.3

Commençons par préparer notre NAS Synology en tant que serveur NFS. Dans le Panneau de configuration puis dans Services de fichier, aller dans l’onglet NFS et activer le service avec le protocole en sa version 4.1.

Ensuite, créer un répertoire partager « nfs », sa configuration n’a pas d’importance à ma connaissance. Ce répertoire sera le seul qui bénéficiera sur la NAS de permissions NFS.

Cliquez sur votre nouveau répertoire NFS et modifiez sa configuration. Sur l’onglet « Autorisations NFS » cliquer sur « Créer ». L’adresse IP sera celle du client NFS, votre hôte docker. Ensuite configurer la règle comme ci-dessous.

Dans le répertoire maintenant, je créer un sous-répertoire « docker » qui contiendra l’intégralité de mes volumes docker. Ensuite je créer une arborescence cohérente comme présenté ci-dessous.

À noter que la stack de démonstration de cet article est wordpress. Il faut aussi savoir avant de déployer votre conteneur qu’il faudra impérativement créer les dossiers contrairement au volume et bind mount habituel sous docker. Spécificité liée aux permissions NFS, je créer ici ce dont j’ai besoin, c’est à dire deux répertoires : db et html

Préparation de l’hôte et déploiement de la stack

On en a fini avec le NAS, rendez vous sur votre hôte docker, dans mon cas un debian. Il faudra installer le client NFS sur votre machine, dans le cas de debian voici le paquet à installer :

apt update && apt full-upgrade -y
apt install nfs-common

Passons enfin à la configuration de notre stack, la partie volume comprend plusieurs paramètres. Voici ceux qu’il fera modifier selon votre infrastructure :

o: « addr=192.168.20.11,rw »modifier l’ip afin qu’elle corresponde avec votre serveur NFS
device: « :/volume1/nfs/docker/wordpress/html »modifier le chemin selon l’arborescence de fichier de votre serveur NFS
version: "2"
services:
   wordpress-db:
     container_name: wordpress-db
     image: mysql:5.7
     volumes:
       - nfs-wp-db:/var/lib/mysql
     restart: unless-stopped
     environment:
       MYSQL_ROOT_PASSWORD: root-password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: utilisateur
       MYSQL_PASSWORD: password
 
   wordpress:
     container_name: wordpress
     depends_on:
       - wordpress-db
     image: wordpress:latest
     ports:
       - 1080:80
     restart: unless-stopped
     volumes:
       - nfs-wp-html:/var/www/html
     environment:
       WORDPRESS_DB_HOST: wordpress-db:3306
       WORDPRESS_DB_USER: utilisateur
       WORDPRESS_DB_PASSWORD: password
       WORDPRESS_DB_NAME: wordpress
       
volumes:
  nfs-wp-html:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=192.168.20.11,rw"
      device: ":/volume1/nfs/docker/wordpress/html"
  nfs-wp-db:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=192.168.20.11,rw"
      device: ":/volume1/nfs/docker/wordpress/db"

Vous pouvez déployer votre première stack avec dans volumes NFS !

Après le déploiement, je vois bien que mon volume contient les données du conteneur, ce qui valide la procédure.

Jérémy Taunay

🪪 Be smarter everyday | 🏮 Less is more | 🐧Tech systèmes et réseaux | 🖥️ Homelaber