MySQL et phpMyAdmin avec Docker Compose

Introduction

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'

Réseau

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

Volume

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'

MySQL

Configurons maintenant le container de MySQL.

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

phpMyAdmin

De la même façon, configurons maintenant le container pour phpMyAdmin:

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

Fichier Docker Compose

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

Lancer les container

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

phpMyAdmin

Dans votre navigateur favori, rendez-vous à l'adresse http://localhost:8081/

La page d'accueil de phpMyAdmin devrait s'afficher :

phpMyAdmin lancé depuis un container Docker avec Docker Compose

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

MySQL en ligne de commande

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)

Téléchargement

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

Voir aussi


Dernière mise à jour : 17/03/2024