Introduction
Dans ce tutoriel, nous allons voir comment déployer un conteneur MySQL version 5.7.26 avec Docker. L'objectif est de couvrir les étapes clés : téléchargement de l'image, lancement du conteneur avec persistance des données, configuration de l'accès distant et vérification de la résilience des données après redémarrage ou suppression du conteneur.
Prérequis
- Docker installé sur la machine hôte
- Privilèges suffisants pour exécuter des commadnes Docker
Étape 1 : Téléchargement de l'image MySQL
Commencez par récupérer l'image officielle MySQL en version 5.7.26 :
docker pull mysql:5.7.26
Vérifiez que l'image est bien présente :
docker images | grep mysql
Étape 2 : Lancement du conteneur avec persistance des données
Pour garantir la conservation des données en cas de suppression du conteneur, nous montons des volumes hôtes. Créez un répertoire de travail (par exemple /opt/mysql-data) et placez-vous dedans :
mkdir -p /opt/mysql-data
cd /opt/mysql-data
Exécutez la commande suivante (en adaptant les chemins et le mot de passe) :
docker run -d \
--name db-mysql \
-p 3307:3306 \
-v "$(pwd)"/conf:/etc/mysql/conf.d \
-v "$(pwd)"/logs:/var/log/mysql \
-v "$(pwd)"/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=MyStr0ngP@ss \
mysql:5.7.26
Explication des options :
-d: exécute le conteneur en arrière-plan--name db-mysql: nom du conteneur-p 3307:3306: mappe le port 3307 de l'hôte vers le port 3306 du conteneur-v: monte des volumes hôtes pour la configuration, les logs et les données-e MYSQL_ROOT_PASSWORD: définit le mot de passe root
Il est recommandé d'utiliser des chemins absolus pour éviter les surprises lors des redémarrages. Exemple équivalent avec chemins fixes :
docker run -d \
--name db-mysql \
-p 3307:3306 \
-v /opt/mysql-data/conf:/etc/mysql/conf.d \
-v /opt/mysql-data/logs:/var/log/mysql \
-v /opt/mysql-data/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=MyStr0ngP@ss \
mysql:5.7.26
Vérification du démarrage
docker ps | grep mysql
Vous devriez voir une ligne similaire à :
a1b2c3d4e5f6 mysql:5.7.26 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp db-mysql
Accès au conteneur et connexion à MySQL
docker exec -it db-mysql bash
# Une fois dans le conteneur :
mysql -u root -p
# Saisissez le mot de passe défini plus tôt
Vous devriez obtenir l'invite MySQL :
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
Activation de l'accès distant pour l'utilisateur root
Attention : Cette configuration est réservée aux environnements de test. En production, utilisez des utilisateurs dédiés avec des privilèges restreints.
mysql> USE mysql;
mysql> UPDATE user SET host='%' WHERE user='root';
mysql> FLUSH PRIVILEGES;
Ou utilisez la commande GRANT (équivalante) :
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'MyStr0ngP@ss' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
Quittez ensuite MySQL : exit
Test de connexion distante
Depuis un client MySQL externe, connectez-vous à l'adresse IP de l'hôte Docker sur le port mappé (3307). Par exemple, si votre hôte est 192.168.1.100 :
mysql -h 192.168.1.100 -P 3307 -u root -p
Résilience des données : arrêt, suppression et recréation du conteneur
Arrêtez et supprimez le conteneur :
docker stop db-mysql
docker rm db-mysql
Vérifiez que les données persistent dans le volume hôte :
ls -l /opt/mysql-data/data/
Vous devriez voir les ficheirs de base de données. Recréez maintenant le conteneur avec la même commande (en vous assurant d'être dans le bon répertoire) :
docker run -d --name db-mysql -p 3307:3306 -v /opt/mysql-data/conf:/etc/mysql/conf.d -v /opt/mysql-data/logs:/var/log/mysql -v /opt/mysql-data/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=MyStr0ngP@ss mysql:5.7.26
Connectez-vous à MySQL et vérifiez que la base de données test (si elle avait été créée) est toujours présente :
docker exec -it db-mysql mysql -u root -p -e "show databases;"
Les données sont bien conservées grâce au volume monté.
Remarques pour la production
- Ne jamais exposer root sans restriction en production. Utilisez des comptes dédiés avec des privilèges limités.
- La gestion de clusters MySQL, de la réplication et du réseau dépasse le cadre de Docker simple. Pour des déploiements avancés, envisagez Kubernetes ou des solutions comme MySQL InnoDB Cluster.
- Les volumes doivent être sauvegardés régulièrement et le stockage doit être fiable (par exemple, NFS, block storage).