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.