Agence web » Actualités du digital » Comment exécuter MySQL dans un conteneur Docker –

Comment exécuter MySQL dans un conteneur Docker –

Les conteneurs Docker vous permettent de lancer rapidement de nouvelles applications sans polluer votre système avec des dépendances. Une base de données MySQL est une exigence courante pour les logiciels Web. Voici comment faire fonctionner une nouvelle instance MySQL dans Docker en quelques minutes seulement.

Commencer

L’image MySQL officielle sur Docker Hub fournit tout le nécessaire pour commencer. Les images sont disponibles pour les versions 5.6, 5.7 et 8.0 de MySQL. Spécifiez celui que vous souhaitez utiliser comme balise d’image:

docker pull mysql:8.0

Avant le déploiement, vous devrez configurer un volume Docker ou un montage de liaison pour conserver votre base de données. Sinon, vos données seront perdues lorsque le conteneur redémarrera. La monture doit être faite pour /var/lib/mysql dans le conteneur.

Vous devez également définir un mot de passe pour l’utilisateur root MySQL. Utilisez le MYSQL_ROOT_PASSWORD variable d’environnement. MySQL refusera de s’initialiser si cette variable n’est pas définie. Essayez de choisir un mot de passe sécurisé.

Voici comment exécuter MySQL tout en satisfaisant ces prérequis:

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0

La routine de première exécution de MySQL prendra quelques secondes. Vous pouvez vérifier si la base de données est active en exécutant docker logs my-mysql. Recherchez une ligne contenant ready for connections.

Docker Compose

le docker run La commande peut rapidement devenir longue, surtout si vous avez des exigences de configuration complexes. Écrire un docker-compose.yml le fichier est plus facile à maintenir. Voici un exemple:

version: "3"

services:
  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD
    volumes:
      - mysql:/var/lib/mysql

volumes:
  mysql:

Vous pouvez démarrer MySQL en utilisant MYSQL_ROOT_PASSWORD=secure docker-compose up -d.

Connexion à MySQL

Vous pouvez obtenir un shell MySQL interactif en vous attachant au conteneur et en exécutant le mysql commander. Cela fournit l’interface de ligne de commande MySQL complète, vous pouvez donc utiliser toutes les commandes et tous les indicateurs familiers.

docker exec -it my-mysql mysql -p

Cette commande ouvre un shell en tant qu’utilisateur root et demande un mot de passe.

Pour importer un fichier SQL depuis votre système de fichiers, vous pouvez le diriger vers la commande:

docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql

Vous devez configurer une liaison de port si vous souhaitez accéder à MySQL depuis votre hôte. Liez un port hôte au port 3306 du conteneur. Ajoutez ce qui suit à votre docker-compose.yml fichier, dans le mysql définition du service:

ports:
 - 33060:3306

Cela liera le port 33060 de votre machine hôte au port 3306 du conteneur. Si vous n’utilisez pas Docker Compose, passez -p 33060:3306 à docker run lorsque vous démarrez votre conteneur. Vous pourrez désormais vous connecter à localhost:33060 en utilisant des clients MySQL exécutés sur votre hôte.

Si vous devez vous connecter depuis une autre Conteneur Docker, il est préférable d’utiliser Docker Compose. Définissez un autre service pour le nouveau conteneur. Les deux conteneurs existeront dans le même réseau Docker. Vous pourrez vous connecter en utilisant le port 3306 sur le nom d’hôte du conteneur MySQL (cela correspond au nom de service défini dans votre fichier Compose).

Création automatique d’une base de données et d’un utilisateur

Les images MySQL Docker prennent en charge des variables d’environnement facultatives qui vous permettent de gérer la configuration de la base de données de première exécution. Définissez ces variables pour provisionner automatiquement une nouvelle base de données et un nouveau compte utilisateur vides:

  • MYSQL_DATABASE – Le nom d’un schéma de base de données à créer lorsque le serveur s’initialise pour la première fois.
  • MYSQL_USER et MYSQL_PASSWORD – Créez un nouveau compte utilisateur initial, séparément du root utilisateur. Si vous définissez également le MYSQL_DATABASE variable, votre nouveau compte utilisateur automatiquement bénéficier de tous les privilèges sur la base de données nouvellement créée.
  • MYSQL_RANDOM_ROOT_PASSWORD – Définissez cette variable pour que MySQL génère automatiquement un nouveau mot de passe pour le root utilisateur. Cela remplace le MYSQL_ROOT_PASSWORD variable. Le mot de passe généré sera émis vers le flux de sortie standard lors de la première exécution. Pour cette raison, vous devez faire attention lorsque vous utilisez cette variable dans des environnements CI – le mot de passe peut être visible par toute personne ayant accès aux journaux des travaux!

Fichiers d’amorçage de première exécution

Vous aurez souvent des tables et des données que vous souhaitez amorcer dans la base de données dès sa création. Les images MySQL sont configurées pour rechercher .sh, .sql et .sql.gz fichiers dans le conteneur /docker-entrypoint-initdb.d annuaire.

Tous les fichiers trouvés seront exécutés séquentiellement. L’ordre sera toujours alphabétique. Vous pouvez appliquer des préfixes de nom de fichier (par exemple 1-seed_tables.sql / 2-seed_data.sql) pour vous assurer que les opérations se terminent dans l’ordre prévu.

Ce mécanisme vous permet d’amorcer facilement votre nouvelle instance de base de données avec les données initiales. Vous pouvez écrire votre propre Dockerfile, en utilisant MySQL comme image de base, et ajouter vos fichiers de départ dans /docker-entrypoint-initdb.d. Alternativement, bind montez un répertoire sur votre hôte dans le répertoire du conteneur.

MySQL ignorera les fichiers d’initialisation à moins qu’il n’y ait pas de base de données dans le répertoire de données. Effacer le contenu de votre répertoire de données déclenchera une nouvelle initialisation lorsque vous redémarrerez le conteneur.

Modification des paramètres du serveur

Les fichiers de configuration du serveur MySQL seront chargés à partir de /etc/mysql/conf.d. Ajoutez vos propres fichiers de configuration à ce répertoire, à l’aide d’un remplacement de fichier Docker ou d’un montage de liaison, pour ajuster les paramètres du serveur. Vous pouvez obtenir la liste des options disponibles dans le manuel du serveur MySQL.

L’utilisation d’un fichier d’options facilite l’affichage et la modification de votre configuration à l’avenir. Vous archivez votre fichier dans le contrôle de version parallèlement à votre projet. Cependant, des indicateurs de ligne de commande sont également disponibles pour des ajustements et des expérimentations ponctuelles.

docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --general-log=on

Cette variante de docker run démarrera MySQL avec le journal général des requêtes activé. le mysql binaire est le point d’entrée de l’image, donc les drapeaux sont passés à docker run après que le nom de l’image sera transmis à mysql.

Conclusion

Exécuter MySQL dans Docker est beaucoup plus rapide et plus simple que d’installer MySQL Server «sans système d’exploitation». Vous pouvez exécuter plusieurs instances MySQL sans risque de conflit.

Les images Docker officielles sont livrées avec des options de configuration utiles et un support intégré pour les bases de données de première exécution. Cela vous permet de démarrer rapidement, que vous partiez de zéro ou que vous utilisiez un schéma existant.

★★★★★