Docker et les backup de bases MySQL/mariaDB
Si vous déployez vos applications à l’aide de docker vous vous êtes sans doute demandé comment gérer la sauvegarde des bases de production. En effet, traditionnellement, sans docker, vous auriez fait un petit script à base de mysql_dump dans un cron sur la machine d’hébergement. Simple et efficace.
Malheureusement sous Docker, il est recommandé de ne rien installer en dehors des containers. Donc, pas de cron ni de mysql_dump.
La première idée qui vient est de tout de même installer ces outils sur l’hôte et de rendre le port 3306 accessible depuis l’hôte. Solution peu satisfaisante et compliquée à mettre en œuvre en cas de cluster Swarm par exemple et avec des impacts de sécurités non neutre.
Simplifier la sauvegarde de votre container
C’est pourquoi nous avons développé une autre méthode pour sauvegarder à l’aide d’un container docker un autre container docker de manière simple et efficace, quel que soit l’architecture de votre cluster et sans rien installer sur le host.
La solution consiste à déployer un simple container qui contiendra les outils cron et mySQLdump et qui sauvegardera le serveur que vous souhaiterez.
Pour cela, rien de plus simple :
Ajoutez l’image de backup à votre docker compose et fournissez lui quelques informations :
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: XXX
volumes:
- /data/volumes/mysql-db:/var/lib/mysql
backup:
image: kiwibackup/mysqlbackup
environment:
- DBHOST=db
- DBPASS=XXX
- DBLOGIN=root
- CRONH=1
- CRONM=19
volumes:
- /data/backup/db:/backup
Ne peut-on pas faire encore plus simple ?
L’inconvénient de cette méthode c’est qu’il ne faut pas oublier d’ajouter le container de sauvegarde dans vos docker-compose.
Une idée d’amélioration serait d’avoir un container connecté aux api Docker et qui surveille tous les containers démarrés sur l’environnement et les sauvegardes automatiquement. C’est possible grâce aux api docker et cela faciliterait le déploiement de nouvelles stack sans se poser de question.
Affaire à suivre …