Cette page explique comment exécuter MySQL et phpMyAdmin avec Docker.
MySQL est un système de gestion de base de données relationnelle (SGBDR) populaire et open-source qui est couramment utilisé dans les applications Web. Il stocke les données dans des tables et utilise le langage SQL (Structured Query Language) pour accéder à ces données et les manipuler.
phpMyAdmin est un outil web gratuit et open-source utilisé pour gérer les bases de données MySQL. Il fournit une interface conviviale qui permet aux utilisateurs de créer et de gérer des bases de données, des utilisateurs, et les privilèges, ainsi que d'exécuter des instructions SQL et de gérer les données.
Utilisons Docker pour exécuter à la fois MySQL et phpMyAdmin en créant un fichier docker-compose.yml
.
Dans la première ligne de docker-compose.yml
, spécifions la version :
version: '3'
phpMyAdmin doit pouvoir atteindre la base de données MySQL.
Pour éviter des configurations trop complexes, nous allons créer un réseau qui sera commun à MySQL et phpMyAdmin :
Le réseau mysql-phpmyadmin
utilise le bridge afin d'être accessible depuis la machine hôte:
networks:
mysql-phpmyadmin:
name: mysql-phpmyadmin
# use the bridge driver
driver: bridge
Je souhaite ici que la base de données soit enregistrée dans le dossier de l'utilisateur.
Pour cela, créons un volume mysqldata
en spécifiant que ce volume est un dossier de machine hôte.
volumes:
mysqldata:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '${HOME}/server/mysql-phpmyadmin/data'
Configurons maintenant le container de MySQL.
image
est la version de l'image MySQL.container_name
est le nom du container.environement
sont les variables d'environnement (identifiants de la base).ports
sont les ports côté hôte en premier et côté container ensuite.volumes
est le volume où les données seront stoquées.network
est le réseau auquel sera rattaché contre container.Voici la configuration de MySQL :
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: database_name
MYSQL_USER: user_name
MYSQL_PASSWORD: user_password
ports:
- "6033:3306"
volumes:
- mysqldata:/var/lib/mysql
networks:
mysql-phpmyadmin:
aliases:
- mysql
De la même façon, configurons maintenant le container pour phpMyAdmin:
image
est la version de l'image phpMyAdmin.container_name
est le nom du container.environement
sont les variables d'environnement (lien avec la base MySQL).ports
sont les ports côté hôte en premier et côté container ensuite.network
est le réseau auquel sera rattaché contre container.Voici la configuration de phpMyAdmin :
phpmyadmin:
image: phpmyadmin:5.2.0
container_name: phpmyadmin
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- 8081:80
networks:
mysql-phpmyadmin:
aliases:
- phpmyadmin
Voici le fichier docker-compose.yml
en entier:
version: '3'
networks:
mysql-phpmyadmin:
name: mysql-phpmyadmin
# use the bridge driver
driver: bridge
volumes:
mysqldata:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '${HOME}/server/mysql-phpmyadmin/data'
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: database_name
MYSQL_USER: user_name
MYSQL_PASSWORD: user_password
ports:
- "6033:3306"
volumes:
- mysqldata:/var/lib/mysql
networks:
mysql-phpmyadmin:
aliases:
- mysql
phpmyadmin:
image: phpmyadmin:5.2.0
container_name: phpmyadmin
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
ports:
- 8081:80
networks:
mysql-phpmyadmin:
aliases:
- phpmyadmin
Pour lancer les container, il suffit de taper la commande suivante dans le dossier du fichier docker-compose.yml
:
docker compose up -d
L'option -d
permet de lancer le container en tâche de fond.
Si tout se passe bien, les réseaux et le volume devrait se créer, puis les container:
$ docker compose up -d
[+] Running 3/3
⠿ Network mysql-phpmyadmin Created 0.1s
⠿ Container mysql Started 0.6s
⠿ Container phpmyadmin Started
La commande suivanre permet de stopper les containers :
docker compose down
Dans votre navigateur favori, rendez-vous à l'adresse http://localhost:8081/
La page d'accueil de phpMyAdmin devrait s'afficher :
Vous avez deux options pour vous y connecter :
Il s'agit évidemment des identifiants spécifiés dans le fichier docker-compose.yml
.
Dans le premier cas, vous serez administrateur de la base MySQL.
Dans le deuxième cas, vous ne pourrez administrer que la base database_name
Depuis la machine hôte, vous pouvez également vous connecter à la base MySQL en ligne de commande :
Pour se connecter en root (mot de passe root_password
)
mysql --host=127.0.0.1 --port=6033 -u root -p
En tant qu'administrateur, vous pourrez administrer toutes les bases de données :
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| database_name |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0,01 sec)
Ou en utilisateur :
mysql --host=127.0.0.1 --port=6033 -u user_name -p
Vous n'aurez accès qu'aux bases auxquels votre l'utilisateur est accrédité:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| database_name |
| information_schema |
| performance_schema |
+--------------------+
3 rows in set (0,00 sec)
Vous pouvez télécharger le fichier complet ci-dessous.
Notez qu'il faut le renommer docker-compose.yml
pour démarrer les containers :
mysql-phpmyadmin-docker-compose.yml