Si vous êtes nouveau sur MySQL ou si vous souhaitez installer rapidement et sans effort la base de données MySQL, cet article est pour vous. Dans cet article, nous allons apprendre à configurer MySQL avec Docker et Docker Compose sous Linux.
Commençons par configurer l'environnement docker pour lancer le conteneur MySQL.
1. Installer Docker
Avant de lancer le conteneur Docker MySQL, vous devez avoir docker et docker-compose installés sur votre machine. Si vous n'avez pas installé docker et docker-compose, consultez les guides suivants :
- Comment installer Docker dans CentOS
- Comment installer Docker dans Ubuntu
Vous pouvez également consulter les liens officiels de la documentation Docker ci-dessous pour savoir comment configurer Docker et Docker Compose.
- https://docs.docker.com/engine/install/
- https://docs.docker.com/compose/install/
Vous pouvez exécuter les commandes suivantes pour vérifier les versions de docker et de docker-compose avec lesquelles vous exécutez.
$ docker --version Docker version 20.10.11, build dea9396
$ docker-compose --version docker-compose version 1.29.2, build unknown
2. Télécharger l'image MySQL Docker
Accédez au hub Docker pour obtenir l'image Docker MySQL . L'important est que vous décidiez quelle version de MySQL vous allez utiliser.
Exécutez la commande suivante pour extraire l'image MySQL du hub Docker vers votre machine.
$ docker pull mysql:latest
Attention :Il n'est pas nécessaire d'utiliser la balise "latest
", par défaut, il tirera la dernière image.
Pour vérifier si l'image est disponible localement, vous pouvez exécuter la commande suivante :
$ docker images mysql
Exemple de résultat :
REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest b05128b000dd 12 days ago 516MB
Maintenant, l'image est prête à faire tourner le conteneur. Vous pouvez également ignorer cette étape et exécuter le "docker run
" comme indiqué dans la section suivante qui extraira l'image si elle n'est pas disponible localement.
3. Lancer le conteneur MySQL
Exécutez la commande suivante pour démarrer le conteneur Docker MySQL :
$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql

Décomposons la commande ci-dessus et voyons ce que fait chaque indicateur.
--name
→ Pour donner un nom à votre conteneur. Si vous ne spécifiez pas cet indicateur, docker attribuera des noms générés aléatoirement.
-p
→ Cartographie des ports. MySQL écoutera sur le port 3306
nous mappons donc les ports (3306
→ 3306
) de votre machine hôte vers le conteneur Docker. Il n'est pas nécessaire que le port hôte soit 3306
, il peut s'agir de tout ce qui est disponible pour être utilisé.
Exécutez le netstat
suivant sur votre ordinateur local pour vérifier si le port mappé écoute ou non une fois le conteneur lancé.
$ netstat -tlnup | grep -i 3306
Exemple de résultat :
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 168870/docker-proxy tcp6 0 0 :::3306 :::* LISTEN 168878/docker-proxy
-v
→ Attachez un volume au conteneur. Le comportement par défaut de docker est qu'il ne conservera pas les données une fois le conteneur supprimé, vous perdrez donc toutes vos données.
Pour créer un stockage persistant, j'ai créé un volume nommé "mysql_volume
". MySQL stocke les données dans /var/lib/mysql/
à l'intérieur du conteneur et ici, il est mappé au répertoire localhost /var/lib/docker/volumes/mysql_volume1/_data
, vos données seront donc persistantes.
Si vous souhaitez en savoir plus sur les volumes de docker, consultez notre article détaillé sur le même.
-d
→ Démarrera et exécutera le conteneur en mode détaché. Si vous omettez le -d
flag, vous verrez alors les journaux de démarrage du conteneur dans le terminal et vous devrez ouvrir une nouvelle session de terminal pour vous connecter au conteneur.
-e
→ Variables environnementales. Vous devez configurer le mot de passe de l'utilisateur root mysql en utilisant l'un des paramètres ci-dessous.
MYSQL_ROOT_PASSWORD
→ Configurez votre propre mot de passe à l'aide de cette variable d'environnement.MYSQL_ALLOW_EMPTY_PASSWORD
→ Un mot de passe vide ou nul sera défini. Vous devez définirMYSQL_ALLOW_EMPTY_PASSWORD=1
.MYSQL_RANDOM_ROOT_PASSWORD
→ un mot de passe aléatoire sera généré au démarrage du conteneur. Vous devez définirMYSQL_RANDOM_ROOT_PASSWORD=1
pour générer le mot de passe aléatoire.
Si vous ignorez cette étape, une erreur sera générée comme indiqué ci-dessous.

4. Vérifier l'état du conteneur MySQL
Vous pouvez vérifier l'état du conteneur lancé à l'aide de la commande suivante :
$ docker ps
Exemple de résultat :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1fb895f6f0f mysql "docker-entrypoint.s..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
5. Se connecter à la base de données MySQL
Exécutez la commande suivante pour vous connecter au conteneur MySQL.
$ docker exec -it mysql bash
Connectez-vous à la base de données MySQL en tant que root
utilisateur en exécutant la commande suivante. Dans mon cas, j'ai configuré mon propre mot de passe via MYSQL_ROOT_PASSWORD
.
$ mysql -u root -p

Si vous avez utilisé MYSQL_RANDOM_ROOT_PASSWORD=1
lors du lancement du conteneur, vous pouvez obtenir le mot de passe généré automatiquement à partir des journaux.
$ docker logs
$ docker logs mysql

Le mot de passe root généré automatiquement sera long et il ne faut pas s'en souvenir. Vous pouvez réinitialiser le mot de passe root en exécutant la requête suivante.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';
Remplacez le mot de passe 'mysqlpassword' par votre propre mot de passe. Vous pouvez également créer votre propre utilisateur et lui accorder les privilèges nécessaires.
6. Charger des exemples de données
L'objectif principal de la configuration de mysql est de charger des données et d'exécuter des requêtes dessus. Il existe plusieurs façons de charger les données. J'ai un exemple de fichier nommé "load_data.sql
" avec les requêtes suivantes.
CREATE DATABASE IF NOT EXISTS football; USE football; CREATE TABLE IF NOT EXISTS players ( player_name VARCHAR(16) NOT NULL, player_age INT NOT NULL, player_club VARCHAR(16) NOT NULL, player_country VARCHAR(16) NOT NULL ); INSERT INTO players VALUES ("Messi",34,"PSG","Argentina"); INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal"); INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil"); INSERT INTO players VALUES ("Kane",28,"SPURS","England"); INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");
La première approche sera de copier les données de la machine locale vers le conteneur docker en utilisant le "docker cp
" commande.
$ docker cp load_data.sql mysql:/tmp
$ docker exec -it mysql bash
$ ls -l /tmp/
Vous pouvez maintenant vous connecter au client mysql et exécuter la commande source ou rediriger le fichier vers le client mysql.
$ mysql -u root -p
mysql> source /tmp/load_data.sql
Ou
$ mysql -u root -p < /tmp/load_data.sql
Connectez-vous à la base de données et interrogez votre table.
$ mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;

La deuxième approche serait de rediriger le .sql
fichier lors de l'exécution de docker exec
commande.
$ docker exec -i mysql mysql -u root -p < load_data.sql
7. Configurer le conteneur MySQL à l'aide de Docker-Compose
Au lieu d'extraire l'image et d'exécuter le docker run
commande, vous pouvez utiliser docker-compose pour faire tourner rapidement le récipient. Docker-compose convient mieux lorsque vous avez plusieurs conteneurs à créer.
Créez un fichier nommé docker-compose.yml
ou docker-compose.yaml
dossier. Copiez et collez le code yaml suivant. C'est la même chose que ce que j'ai exécuté manuellement dans les sections précédentes.
version: '3.8' services: database: image: mysql:latest container_name: mysql environment: MYSQL_ROOT_PASSWORD: temp1234 ports: - "3306:3306" volumes: - mysql_volume:/var/lib/mysql volumes: mysql_compose_volume:
Exécutez maintenant la commande suivante qui lancera le conteneur Docker MySQL.
$ docker-compose up

Exécutez la commande suivante pour vérifier l'état du conteneur lancé à l'aide de docker-compose :
$ docker-compose ps
Exemple de résultat :
Name Command State Ports ------------------------------------------------------------------------------------------------- mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
8. Connectez-vous à la base de données MySQL à l'aide de MySQL Workbench
Jusqu'à présent, nous avons vu comment se connecter à la base de données à l'aide du client mysql depuis l'intérieur du conteneur. Vous pouvez également vous connecter à la base de données à l'aide de n'importe quel client graphique comme mysql workbench, dbeaver, Heidi SQL, etc.
La chose importante à noter, quel que soit le client GUI que vous utilisez, est le port mappé lorsque vous lancez le conteneur.
Dans mon cas, j'ai mappé localhost (3306
) -> conteneur (3306
). Donc, si je dois établir une connexion à la base de données, je dois me connecter à localhost:3306
ou 127.0.01:3306
.
J'utilise MySQL Workbench comme client graphique. Si vous n'avez pas installé MySQL Workbench sur votre ordinateur, vous pouvez utiliser les instructions ci-dessous pour l'installer.
8.1. Installer MySQL Workbench sous Linux
Accédez au site officiel pour télécharger le fichier de package. Vous devez choisir votre système d'exploitation pour télécharger le .deb
ou .rpm
fichier.

À l'étape suivante, il vous demandera de vous connecter ou de vous inscrire. Vous pouvez ignorer la connexion ou l'inscription en cliquant sur l'option "Non merci, démarrez simplement mon téléchargement".

Sur les systèmes basés sur Debian, installez MySQL Workbench comme ci-dessous :
$ cd <path to downloaded .deb file>
$ sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
Sur les systèmes basés sur RHEL, installez MySQL Workbench comme ci-dessous :
$ cd <path to downloaded .rpm file>
$ sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
Une fois l'installation terminée, vous pouvez lancer mysql workbench depuis le menu ou le tiret.

Lancer MySQL Workbench
8.2. Connectez-vous à la base de données MySQL
Connectez-vous à la base de données exécutée dans un conteneur Docker. Vous devriez essayer de vous connecter à localhost:3306
ou localhost:<port-no>
selon la configuration de votre conteneur.

Avant de vous connecter à la base de données, vous pouvez appuyer sur "Tester la connexion " pour vérifier que MySQL Workbench a réussi à se connecter à l'instance de base de données.

Vous pouvez maintenant commencer à exécuter vos requêtes sur les tables que vous avez créées.

9. Conclusion
Dans cet article, nous avons brièvement vu comment lancer des conteneurs MySQL dans docker en utilisant docker run
et docker-compose
méthodes. Si vous souhaitez configurer MySQL à des fins de test ou d'apprentissage, Docker est plus que suffisant.
J'espère que cela vous aidera.