Comment déployer MySQL/MariaDB dans Docker avec stockage de données persistant | INTROSERV
EUR
european

EUR

usa

USD

French Fr
Ex. VAT Ex. VAT 0%

Comment déployer MySQL/MariaDB dans Docker avec stockage de données persistant

Introduction

Dans ce tutoriel, vous déployez un conteneur de base de données MySQL ou MariaDB en utilisant Docker avec un stockage de données persistant. Exécuter des bases de données dans des conteneurs simplifie le déploiement, le contrôle de version et la portabilité entre les environnements. À la fin de ce tutoriel, vous aurez une instance MySQL ou MariaDB prête pour la production fonctionnant dans Docker avec des données stockées en toute sécurité en dehors du conteneur.

Prérequis

Public cible : Administrateurs système intermédiaires
Temps estimé pour terminer : ~30–45 minutes

Système d'exploitation

  • Ubuntu 24.04 LTS (testé)
  • Également compatible avec : Ubuntu 22.04 LTS, Debian 12 / 13

Exigences logicielles

  • Docker 24.0.6 ou version ultérieure
  • Docker Compose v2 (inclus avec les installations modernes de Docker)

Vérifiez votre version de Docker :

docker --version

Résultat attendu : Docker version 24.0.6, build ed223bc

Vérifiez la version de Docker Compose :

docker compose version

Résultat attendu : Docker Compose version v5.1.0

Tip

Si vous n'avez pas Docker installé, vous l'installerez lors de l'Étape 1.

Exigences matérielles

  • Minimum 2 Go de RAM
  • Au moins 10 Go d'espace disque libre

Exigences réseau

  • Port 3306 disponible (port par défaut MySQL/MariaDB)
  • Pare-feu configuré pour autoriser l'accès uniquement si des connexions externes sont nécessaires

Permissions

  • Un utilisateur non-root avec des privilèges sudo
  • Utilisateur ajouté au groupe docker (recommandé)

Connaissances présumées

  • Concepts de base de Docker (images, conteneurs, volumes)
  • À l'aise avec les opérations en ligne de commande

Étape 1 : Installer et vérifier Docker

Si Docker n'est pas installé, installez-le :

sudo apt update && sudo apt upgrade -y && sudo apt install curl

curl -sSL https://get.docker.com/ | CHANNEL=stable bash

sudo apt install docker-ce docker-compose-plugin -y

Activez et démarrez Docker :

sudo systemctl enable docker

sudo systemctl start docker

Vérifiez que Docker fonctionne :

sudo systemctl status docker

Résultat attendu : le statut du service Docker indique active (running).

Ajoutez votre utilisateur au groupe docker pour éviter d'utiliser sudo lors de l'utilisation de Docker :

sudo usermod -aG docker <YOUR_USERNAME>

newgrp docker

Étape 2 : Créer un répertoire de données persistantes

Un montage bind mappe un répertoire du système hôte directement dans un conteneur, le rendant accessible dans le système de fichiers du conteneur.
Créez un répertoire pour les données de la base de données et définissez les permissions appropriées :

mkdir -p ~/mysql-docker/data

chmod 750 ~/mysql-docker/data

Ce répertoire stockera les fichiers de la base de données en dehors du conteneur.

Info

Sans stockage persistant, toutes les données de la base de données sont perdues lorsque le conteneur est supprimé.

Étape 3 : Créer une configuration Docker Compose

Accédez à votre répertoire de projet :

cd ~/mysql-docker

Créez un fichier docker-compose.yml :

nano docker-compose.yml

Ajoutez la configuration suivante (exemple MySQL) :

services: mysql: image: mysql:8.0.36 container_name: mysql-server restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MYSQL_DATABASE: appdb MYSQL_USER: appuser MYSQL_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql

Alternative MariaDB — si vous préférez MariaDB, utilisez :

services: mariadb: image: mariadb:11.3 container_name: mariadb-server restart: unless-stopped environment: MARIADB_ROOT_PASSWORD: <YOUR_STRONG_ROOT_PASSWORD> MARIADB_DATABASE: appdb MARIADB_USER: appuser MARIADB_PASSWORD: <YOUR_STRONG_USER_PASSWORD> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql

Info

Important : Ne jamais coder en dur de vrais mots de passe dans le contrôle de version. Utilisez des variables d'environnement ou un fichier .env en production. Remplacez <YOUR_STRONG_USER_PASSWORD> et <YOUR_STRONG_ROOT_PASSWORD> par vos mots de passe sécurisés.

Étape 4 : Démarrer le conteneur de base de données

Exécutez :

docker compose up -d

Résultat attendu :

  • Docker télécharge l'image (si elle n'est pas déjà téléchargée)
  • Le conteneur démarre en mode détaché

Vérifiez le statut du conteneur :

docker ps

Résultat attendu :

CONTAINER ID IMAGE STATUS PORTS abc123def456 mysql:8.0.36 Up 10 seconds 0.0.0.0:3306->3306/tcp

Étape 5 : Vérifier la fonctionnalité de la base de données

Se connecter au conteneur

Pour le conteneur MySQL, exécutez :

docker exec -it mysql-server mysql -u root -p

Pour le conteneur MariaDB, exécutez :

docker exec -it mariadb-server mysql -u root -p

Entrez votre mot de passe root.
Résultat attendu : l'invite de commande MySQL apparaît : mysql>

Vérifier les bases de données

SHOW DATABASES;

Vous devriez voir :

  • appdb
  • information_schema
  • mysql
  • performance_schema
  • sys

EXIT;

Tester la persistance des données

Créer une table de test

docker exec -it mysql-server mysql -u root -p

Dans l'invite de commande MySQL, entrez les commandes suivantes :

USE appdb;

CREATE TABLE test_table (id INT PRIMARY KEY);

EXIT;

Arrêter et supprimer le conteneur

docker compose down

Redémarrer le conteneur

docker compose up -d

Vérifier que la table existe toujours

docker exec -it mysql-server mysql -u root -p

Dans l'invite de commande MySQL, entrez les commandes suivantes :

USE appdb;

SHOW TABLES;

Résultat attendu : test_table apparaît. Cela confirme que le stockage persistant fonctionne.

Étape 6 : Sécuriser le déploiement

Restreindre l'accès externe

Si l'accès à la base de données n'est nécessaire qu'en interne, modifiez les ports dans docker-compose.yml :

ports: - "127.0.0.1:3306:3306"

Redémarrez :

docker compose down

docker compose up -d

Info

Important : Évitez d'exposer le port 3306 publiquement sauf si absolument nécessaire.

Utiliser un fichier .env

Créez .env :

nano .env

Exemple :

MYSQL_ROOT_PASSWORD=<YOUR_STRONG_ROOT_PASSWORD> MYSQL_PASSWORD=<YOUR_STRONG_USER_PASSWORD>

Référencez dans docker-compose.yml :

environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_PASSWORD: ${MYSQL_PASSWORD}

Vérification

Vous pouvez confirmer que tout fonctionne correctement en :

  • Exécutant docker ps — le conteneur est Up
  • Se connectant via l'interface CLI MySQL — la connexion réussit
  • Redémarrant le conteneur — les données persistent
  • Vérifiant les journaux : docker logs mysql-server

Entrées de journal attendues : "ready for connections".

Revenir en arrière

Pour arrêter et supprimer le conteneur :

docker compose down

Pour supprimer les données persistantes :

Info

Important : Cela supprime définitivement toutes les données de la base de données.

rm -rf ~/mysql-docker/data

Pour désinstaller Docker :

sudo apt remove docker-ce docker-compose-plugin -y

Dépannage

Le conteneur ne démarre pas

Vérifiez les journaux :

docker logs mysql-server

Causes courantes :

  • Mot de passe faible rejeté
  • Port 3306 déjà utilisé

Vérifiez l'utilisation du port :

sudo ss -tulnp | grep 3306

Erreurs de permission

Si vous voyez des erreurs de permission refusée :

sudo chown -R 999:999 ~/mysql-docker/data

999 est couramment l'ID utilisateur du conteneur MySQL.

Conclusion & Prochaines étapes

Vous avez déployé avec succès MySQL ou MariaDB dans Docker avec un stockage persistant. La base de données fonctionne maintenant dans un conteneur isolé tout en stockant les données en toute sécurité sur le système hôte.

Prochaines étapes :

  • Configurer des sauvegardes automatisées
  • Mettre en œuvre la réplication pour une haute disponibilité
  • Intégrer avec des conteneurs d'application
  • Ajouter une surveillance avec Prometheus et Grafana

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA