GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment créer un conteneur MySQL Docker pour les tests

Docker est un environnement d'exécution de conteneur qui permet aux programmes de fonctionner dans un environnement emprisonné sans aucune dépendance externe requise. Les conteneurs sont similaires dans certains concepts aux machines virtuelles, cependant, ils n'utilisent pas d'hyperviseur et s'exécutent dans une seule instance de noyau, partageant souvent l'instance avec d'autres conteneurs. L'une des principales caractéristiques de la conteneurisation est l'absence de dépendances externes ; le conteneur contient toutes les bibliothèques d'exécution et les composants nécessaires pour exécuter l'application.

Oracle fournit des images de conteneur Docker depuis MySQL 5.5.40 et fait ainsi de Docker un excellent choix pour effectuer des tests sur plusieurs versions et versions de MySQL. Souvent, il est souhaitable d'effectuer des tests de régression d'un bogue pour déterminer quelle(s) version(s) le bogue affecte ou pour quantifier comment le comportement a changé entre les versions.

Docker permet un lancement assez léger des instances MySQL avec une fonction de nettoyage automatique une fois les tests terminés. Dans cet article, je vais vous montrer quelques-unes des façons dont vous pouvez utiliser Docker pour lancer MySQL et l'utiliser à des fins de test.

Avant de pouvoir utiliser Docker, il doit être installé sur votre machine de test. Si vous n'avez pas accès directement à un système Linux, je vous recommande d'obtenir VirtualBox et de créer une machine virtuelle Linux pour exécuter des images Docker, de bons choix pour le système d'exploitation seraient CentOS 7 ou Fedora (dernier). Fedora peut être considérée comme l'amont des variantes Linux d'entreprise et sera donc garantie d'avoir le dernier support pour les technologies.

Installation

1. Sur les systèmes dotés de YUM ou DNF et ayant accès aux référentiels du système d'exploitation, vous pouvez installer docker avec cette commande :

# yum install docker docker-common

Après avoir exécuté cette commande, vous devriez être invité par YUM à installer docker et toutes les dépendances nécessaires.

2. Pour utiliser Docker, vous devez ensuite démarrer le service :

# service docker start

Sur les distributions CentOS/RHEL 7, utilisez systemctl :

# systemct start docker

3. Si vous souhaitez que Docker soit disponible après chaque redémarrage, activez-le avec cette commande :

# chkconfig docker on

Sur les distributions CentOS/RHEL 7, utilisez systemctl :

# systemct enable docker

Fonctionnement de Docker

Docker en lui-même n'est qu'un gestionnaire de conteneurs. Pour utiliser efficacement Docker, vous devez avoir accès à docker.io, le site sur lequel les images de conteneurs Docker sont publiées et peuvent être téléchargées. Les conteneurs Docker sur docker.io contiennent une image des fichiers binaires MySQL et des informations de dépendance afin que le service Docker puisse télécharger les fichiers d'exécution et le système de fichiers virtuel appropriés pour que le conteneur Docker s'exécute.

Lorsque vous créez une instance de conteneur Docker, elle alloue un système de fichiers virtuel pour le conteneur qui est persistant d'une exécution à l'autre (sauf si vous utilisez le –rm changer). Vous pouvez démarrer et arrêter les conteneurs Docker à volonté et ils resteront persistants lors des redémarrages. L'une des fonctionnalités de Docker qui le rend particulièrement pratique pour les instances de test est la possibilité d'effacer le conteneur une fois arrêté. Si vous démarrez un conteneur Docker avec l'option –rm, lorsque le conteneur est arrêté, il est également supprimé du système de fichiers et aide à éliminer le cruft.

Créer et lancer des conteneurs

Voici la commande la plus simple pour lancer la dernière version de MySQL dans un conteneur et la supprimer après l'arrêt :

# docker run --rm --name=mysql8 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:latest

Voici le décodage de cette commande :

  • menu fixe – docker est le nom de l'exécutable utilisé pour exécuter toutes les fonctions de docker.
  • exécuter - ceci est une commande donnée à docker, elle demande à docker de créer un nouveau conteneur et de l'exécuter.
  • –rm - cela indique à docker de supprimer les fichiers conteneurs après son arrêt.
  • –name=mysql8 - cela indique à docker de nommer le conteneur 'mysql8' pour toutes les futures références de commande. Ce nom est arbitraire mais doit être descriptif pour éviter tout conflit avec plusieurs instances de conteneur.
  • -e MYSQL_ALLOW_EMPTY_PASSWORD - cela transmet une option au conteneur pendant la phase de création, indiquant au conteneur d'attribuer un mot de passe root vide pendant le processus de création.
  • -d mysql/mysql-server:latest – cela indique à docker le référentiel et la version à télécharger depuis docker.io lors de la création du conteneur. Le mot "dernière" est une version magique qui indique à Docker de télécharger la dernière version de toutes les versions de MySQL, vous pouvez également spécifier les numéros de version exacts.

Certaines des modifications utiles de la commande ci-dessus peuvent consister à spécifier une version de MySQL ou à lui donner un nom unique. Voici un exemple où MySQL 8.0.13 est spécifié et un nom similaire unique est utilisé :

# docker run --rm --name=mysql8013 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:8.0.13

Vous pouvez même extraire des instances MySQL 5.5 de cette manière :

docker run --rm --name=mysql55 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server:5.5
Remarque :Les exemples ci-dessus ignorent DÉLIBÉRÉMENT toute sécurité à des fins d'opportunité et de commodité. N'UTILISEZ PAS ou ne reproduisez PAS ces configurations dans un environnement de production, elles ne sont PAS sécurisées !

Utiliser l'instance Docker

Jusqu'à présent, nous n'avons discuté que du lancement de l'instance Docker, mais sans accès au programme client, ce n'est pas très utile. Établir des connexions à l'aide des programmes clients MySQL standard est assez simple car ils utilisent des connexions socket locales et se connectent via localhost. Si vous souhaitez vous connecter en utilisant une IP réseau, comme avec MySQL Workbench, c'est un peu plus compliqué.

Voici un exemple de connexion CLI mysql locale :

# docker exec -it mysql8 mysql -uroot

Décomposons cette commande :

  • exécution - indique à docker d'exécuter une commande dans une instance de conteneur docker.
  • -il – indique à docker de créer une session interactive avec un pseudo-tty.
  • mysql8 - indique à docker que la commande sera exécutée dans l'instance de conteneur nommée "mysql8".
  • mysql -uroot - il s'agit de la ligne de commande réelle du shell brut que docker exécute à l'intérieur de l'instance de conteneur.

Les conteneurs MySQL Docker incluent les utilitaires de ligne de commande MySQL, tels que mysql, mysqlpump, mysqldump, etc. t depuis la ligne de commande, comme ceci :

# docker exec -i mysql8 mysql -uroot < dumpfile.sql

Accès TCP/IP aux conteneurs Docker

En utilisant les exemples de commandes ci-dessus, Docker attribuera des adresses IP privées non routables aux conteneurs et créera une interface réseau virtuelle sur votre système. L'interface virtuelle et le conteneur forment les points de terminaison pour établir des connexions TCP/IP au service exécuté dans le conteneur.

Pour connaître l'adresse IP de votre interface réseau virtuelle sur votre machine Linux, exécutez cette commande :

shell> ip addr show docker0

8: docker0:  mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:f7:98:c4:d1 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:f7ff:fe98:c4d1/64 scope link
valid_lft forever preferred_lft forever

Dans l'exemple ci-dessus, vous pouvez voir que l'adresse IP attribuée à mon interface Docker virtuelle est 172.17.0.1, il s'agit du point de terminaison à partir duquel votre application cliente se connectera ; c'est l'adresse IP que vous utiliserez pour créer un utilisateur dans MySQL.

Pour déterminer l'adresse IP attribuée à votre instance de conteneur, exécutez cette commande en remplaçant le nom de votre instance par "mysql" dans l'exemple :

shell> docker inspect mysql8 | grep IPAddress

"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",

Dans la sortie ci-dessus, l'adresse IP de l'instance de conteneur est 172.17.0.2, ce qui rend les points de terminaison 172.17.0.1 <-> 172.17.0.2. Ensuite, nous devons créer un utilisateur pour que le programme client se connecte, sinon vous obtiendrez un refus car 172.17.0.1 n'est pas un hôte autorisé.

shell> docker exec -it mysql8 mysql -uroot

mysql> create user [email protected] identified by '';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to [email protected] with grant option;
Query OK, 0 rows affected (0.01 sec)

Une fois que vous avez créé l'utilisateur réseau, vous pouvez vous connecter à votre instance de conteneur en tant que root sans mot de passe. Le réseau 172.17.0.0/16 est un réseau privé non routable qui n'est pas accessible depuis l'extérieur de votre machine, il n'y a donc aucun risque que quelqu'un accède à votre conteneur Docker depuis l'extérieur.

Arrêt et nettoyage

Une fois les tests terminés, vous devrez arrêter l'instance Docker et nettoyer les fichiers si vous n'avez pas utilisé --rm lors du démarrage.

Pour arrêter une instance Docker :

# docker stop mysql8

Pour supprimer l'instance :

# docker rm mysql8

Conclusion

J'espère avoir illustré l'utilité des conteneurs Docker pour les tests et l'utilisation du bac à sable. Docker a le potentiel de modifier votre flux de travail et de rendre les tests de régression rapides, faciles et pratiques. Le hub Docker contient des images pour la version 5.5.40 et les versions ultérieures.


Cent OS
  1. Comment quitter un conteneur Docker

  2. Comment créer une image personnalisée à partir d'un conteneur Docker

  3. Comment créer un référentiel Yum local pour les packages MySQL Enterprise

  4. Comment changer le fuseau horaire d'un conteneur Docker

  5. Comment spécifier le nom d'hôte pour le conteneur en cours d'exécution ?

Apprendre Docker :comment créer un conteneur Docker

Comment installer Docker sur Debian 11

Comment créer une base de données dans MySQL

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Comment créer un conteneur d'application Django Docker