MariaDB via Docker (en dev)
Notre choix de self-hosting de notre SGBDR demande qu'on l'installe sur notre serveur, avec toutes ses dépendances.
Pourquoi pas utiliser Docker pour récupérer une image déjà conçu par les créateurs du SGBDR afin de s'en passer des différentes phases de mise en service.
L'utilisation de Docker présente plusieurs avantages :
Toutes les dépendances et détails de l'installation sont déjà pris en compte
À l'aide d'un fichier
docker-compose.yml
, on pourrait partager la même configuration de notre SGBDR entre notre serveur de production, notre déploiement de test (staging), et aussi nos machines de développement. Plus l'environnement de dev ressemble à notre environnement de production, mieux c'est !L'utilisation d'un container ouvre la possibilité à la tolérance des fautes. À l'aide d'un système d'orchestration (Docker Swarm ou Kubernetes) notre SGDBR est plus facilement transférable vers une autre instance ou VM si jamais le matériel tombe en panne. Attention ! Cet avantage ne tient uniquement si le stockage des données est bien géré, par exemple, sur un volume indépendant du container et VM.
Nous utiliserons MariaDB comme DBMS pour ce programme :
C’est un fork du projet MySQL Open Source, et maintenu par la communauté
Certains features qui sont payants dans MySQL sont gratuits dans MariaDB (ex. cryptographie)
En ce qui concerne SQL, MariaDB est identique
Configuration docker-compose.yml
Les créateurs de MariaDB maintiennent une image sur Docker Hub : https://hub.docker.com/_/mariadb
Si on lit bien la documentation, on peut constater un nombre d'options d'initialisation. Pour notre installation, nous allons préciser :
Via des variables d'environnement :
Le mot de pass de l'utilisateur root
Désactiver la possibilité de se connecter sans mots de passe
La base de données à utiliser par défaut
Où stocker les données, en spécifiant un volume en dehors du Container
Spécifier des options de lancement, notamment l'encodage de caractère à utiliser
Ci-dessous un exemple d'un docker-compose.yml pour utilisation en local sur une machine de développement.
On peut lancer la base avec la commande, en ouvrant une invite de commandes, en naviguant dans le même dossier que le fichier docker-compose.yml
, et en tapant :
Si tout se passe bien, on verra apparaître dans le même dossier que le docker-compose.yml
un nouveau répertoire dbms-data
Les données physiques de notre SGBDR sont stockés dans ce dossier.
Le mot de passe du root
Les coordonnées de compte root sont configurés une seule fois à la création du SGBDR, en utilisant la variable d'environnement MYSQL_ROOT_PASSWORD
.;
Même si on arrête et relance le container, ce mot de passe n'est plus jamais reconfiguré !
À la première création du SGBDR, si vous êtes trompé de mot de passe, ou dans la rédaction de votre docker-compose.yml, il est possible qu'il faille supprimer le répertoire dbms-data et recommencer.
Dans une nouvelle invite de commandes, on peut vérifier l'existence de notre Container :
Ici, on voit que le Container est bien lancé, qu'il y a un port ouvert sur le numéro 3306.
Contrôle de Docker
Rappelez les commandes pour contrôler Docker :
Pour lancer les services de votre docker-compose :
Pour arrêter l'ensemble des services de votre docker-compose, naviguez vers le répertoire contenant le fichier, et ensuite :
Pour ouvrir une séance interactive (ou on peut rédiger les commandes via le clavier) :
Pour rediriger les contenus d'un fichier vers un Container, on crée une séance interactive, sans préciser le clavier comme périphérique (dans pas de tty). La commande va lire plutôt le stdin :
Attention :
;
exec -i
(sans t !)Je suis obligé de spécifier le mot de passe directement (collé au paramètre-p)
Je suis obligé de préciser le nom de la database à utiliser par défaut (ici,
myfirstdb
)
Dernière mise à jour