Comment exécuter une base de données MySQL dans un conteneur Docker

Utiliser une base de données conteneurisée locale offre de la flexibilité et simplifie la configuration. Cela permet de reproduire fidèlement les environnements de production sans la complexité des installations traditionnelles de bases de données. Docker rationalise ce processus, rendant facile le déploiement, la gestion et le scaling de bases de données dans des conteneurs isolés avec seulement quelques commandes.

Dans ce guide, vous allez apprendre comment :

  • Lancer une base de données conteneurisée locale
  • Accéder au shell d’une base de données conteneurisée
  • Se connecter à une base de données conteneurisée depuis votre hôte
  • Persister les données de la base de données dans un volume
  • Nettoyer le laboratoire

Prérequis

Pour suivre ce guide, vous devez avoir Docker installé. Pour les instructions d’installation, veuillez vous référer au site Web de Docker.

Guide étape par étape pour configurer des bases de données conteneurisées

1. Lancer une base de données conteneurisée locale

La plupart des systèmes de bases de données les plus populaires, tels que MySQLPostgreSQL, et MongoDB, possèdent des images Docker officielles disponibles sur Docker Hub. Ces images soigneusement sélectionnées respectent les meilleures pratiques, garantissant ainsi un accès aux dernières fonctionnalités et mises à jour de sécurité. 

Pour commencer, visitez Docker Hub et recherchez la base de données qui vous intéresse. Chaque page d’image fournit des instructions détaillées sur la façon de lancer le conteneur, personnaliser votre configuration et configurer la base de données pour répondre à vos besoins. Pour plus d’informations sur l’image MySQL fournie dans ce guide, reportez-vous à la page de l’image MySQL sur Docker Hub.

Pour exécuter un conteneur de base de données, vous pouvez utiliser soit l’interface graphique de Docker Desktop, soit la CLI. Pour exécuter un conteneur à l’aide de la CLI, exécutez la commande suivante dans un terminal :

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

Dans cette commande :

  • --name my-mysql attribue le nom my-mysql à votre conteneur pour une référence plus facile.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw définit le mot de passe root de MySQL sur my-secret-pw. Remplacez my-secret-pw par un mot de passe sécurisé de votre choix.
  • -e MYSQL_DATABASE=mydb crée facultativement une base de données nommée mydb. Vous pouvez modifier mydb pour le nom de base de données que vous souhaitez.
  • -d fait fonctionner le conteneur en mode détaché, ce qui signifie qu’il s’exécute en arrière-plan.
  • mysql:latest spécifie que vous souhaitez utiliser la version la plus récente de l’image MySQL.

Pour vérifier que votre conteneur est en cours d’exécution, exécutez docker ps dans un terminal:

Shell

 

run docker ps

Vous pouvez également vérifier la même chose dans la console Docker Desktop:

2. Accéder à la Shell d’une Base de Données Conteneurisée

Quando uma base de dados é executada dentro de um contêiner Docker, você pode precisar acessar seu shell para gerenciar a base de dados, executar comandos ou realizar tarefas administrativas. O Docker oferece uma maneira simples de fazer isso usando o comando docker exec. Além disso, você pode usar a GUI do Docker Desktop se preferir uma interface gráfica.

Se você ainda não tem um contêiner de base de dados em execução, consulte Executar uma Base de Dados Local Contênerizada. Para acessar o terminal de um contêiner MySQL usando a CLI, você pode usar o seguinte comando docker exec.

Shell

docker exec -it my-mysql bash 

Trong này:

  • docker exec informa o Docker que você deseja executar um comando em um contêiner em execução.
  • -it garante que o terminal que você está acessando seja interativo para que você possa digitar comandos nele.
  • my-mysql est le nom de votre conteneur MySQL. Si vous avez nommé votre conteneur différemment lors de son exécution, utilisez ce nom à la place.
  • La commande que vous souhaitez exécuter à l’intérieur du conteneur est bash. Elle ouvre un shell Bash qui vous permet d’interagir avec le système de fichiers du conteneur et les applications installées.
  • Après l’exécution de cette commande, vous aurez accès au shell Bash à l’intérieur de votre conteneur MySQL, à partir duquel vous pouvez gérer directement votre serveur MySQL. Vous pouvez exécuter Exit pour revenir à votre terminal.

Vérifiez si le conteneur Docker est en cours d’exécution.

Shell

 

run docker ps

Une fois que vous avez accédé au terminal du conteneur, vous pouvez exécuter tous les outils disponibles dans ce conteneur. L’exemple suivant (Image) montre l’utilisation de MySQL dans le conteneur pour lister les bases de données.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

La table que nous avons créée et les données que nous avons sauvegardées dans la table de test ne sont persistantes que tant que nous utilisons le même conteneur ; toutes les données seront perdues dès que nous recréons ou construisons un nouveau conteneur.

Vous pouvez valider en sortant du conteneur et en vous reconnectant à la base de données du conteneur pour voir si les données existent. Vous verrez alors que les données existent toujours dans la base de données tant que le conteneur est en cours d’exécution.

3. Se connecter à une base de données conteneurisée depuis votre hôte

Se connecter à une base de données conteneurisée depuis votre machine hôte implique de mapper un port à l’intérieur du conteneur vers un port sur votre machine hôte. Ce processus permet que la base de données à l’intérieur du conteneur soit accessible via le réseau de la machine hôte. Pour MySQL, le port par défaut est 3306. En exposant ce port, vous pouvez utiliser divers outils de gestion de base de données ou applications sur votre machine hôte pour interagir avec votre base de données MySQL.

Avant de commencer, vous devez supprimer tous les conteneurs que vous avez précédemment exécutés pour ce guide. Pour arrêter et supprimer un conteneur, vous pouvez:

  • Dans un terminal, exécuter docker remove --force my-mysql pour supprimer le conteneur nommé my-mysql;
  • Ou, dans le tableau de bord Docker, sélectionner l’icône Supprimer à côté de votre conteneur dans la vue des conteneurs.

Ensuite, vous pouvez utiliser l’interface graphique de Docker Desktop ou la CLI pour exécuter le conteneur avec le port mappé.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

Dans cette commande, -p 3307:3306 mappe le port 3307 sur l’hôte au port 3306 dans le conteneur.

4. Persister les données de la base de données dans un volume

Persister les données de la base de données dans un volume Docker est nécessaire pour garantir que vos données survivent aux redémarrages et suppressions de conteneurs. Un volume Docker vous permet de stocker les fichiers de la base de données en dehors de la couche inscribable du conteneur, rendant possible de mettre à jour le conteneur, de basculer entre les bases, et de partager des données sans les perdre. Vous pouvez attacher un volume à votre conteneur de base de données en utilisant soit la CLI Docker soit l’interface graphique de Docker Desktop.

Note : Comme previously fait dans la section Connexion à une Base de Données Containerisée, avant de commencer, vous devez supprimer tous les conteneurs que vous avez précédemment exécutés pour ce guide.

Ensuite, vous pouvez utiliser l’interface graphique de Docker Desktop ou la CLI pour exécuter le conteneur avec un volume.

Pour exécuter votre conteneur de base de données avec un volume attaché, incluez l’option —v avec votre commande docker run. Cela spécifie un nom de volume et le chemin où la base de données stocke ses données à l’intérieur du conteneur. Si le volume n’existe pas, Docker le crée automatiquement pour vous.

Pour exécuter un conteneur de base de données avec un volume attaché, vérifiez que les données persistent. Exécutez le conteneur et attachez le volume.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

Cette commande monte le volume nommé my-db-volume au répertoire /var/lib/mysql du conteneur.

Créez des données dans la base de données. Utilisez la commande docker exec pour exécuter MySQL à l’intérieur du conteneur et créer une table.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

Cette commande utilise l’outil MySQL dans le conteneur pour créer une table nommée mytable avec une colonne nommée column_name, et enfin, elle insère une valeur.

Arrêtez et supprimez le conteneur. Sans un volume, la table que vous avez créée sera perdue lorsque vous supprimez le conteneur.

Shell

docker remove --force my-mysql

Démarrez un nouveau conteneur avec le volume attaché. Cette fois, vous n’avez pas besoin de spécifier de variables d’environnement car la configuration est sauvegardée dans le volume.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

Vérifiez que la table que vous avez créée existe toujours. Ensuite, utilisez à nouveau la commande docker exec pour exécuter MySQL à l’intérieur du conteneur.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

Cette commande utilise l’outil MySQL dans le conteneur pour sélectionner toutes les enregistrements de la table table. Vous devriez voir une sortie comme celle-ci.

SQL

 

column_name

value

5. Nettoyer l’Image du Conteneur MySQL

Pour supprimer un conteneur, utilisez la commande docker remove avec les noms ou les IDs des conteneurs séparés par des espaces. Par exemple :

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

Conclusion

Finalement, l’utilisation de MySQL avec Docker offre une solution portable, scalable et efficace pour la gestion de bases de données. Les conteneurs isolés de Docker aident à rationaliser le déploiement, à réduire les problèmes de compatibilité et à optimiser l’utilisation des ressources. En permettant un contrôle de version facile et des remises à zéro d’environnement, Docker prend en charge le développement et les tests rapides. Il est idéal pour gérer les bases de données MySQL dans les microservices, les rendant plus faciles à déployer et à étendre tout en maintenant de bonnes performances.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container