GNU/Linux >> Tutoriels Linux >  >> Panels >> 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.

Mise en route

L'image MySQL officielle sur Docker Hub fournit tout ce dont vous avez besoin pour démarrer. Les images sont disponibles pour les versions MySQL 5.6, 5.7 et 8.0. Spécifiez celui que vous souhaitez utiliser comme tag d'image :

docker pull mysql:8.0

Avant le déploiement, vous devrez configurer un volume Docker ou un montage lié pour conserver votre base de données. Sinon, vos données seront perdues au redémarrage du conteneur. Le montage doit être fait sur /var/lib/mysql dans le conteneur.

Vous devez également définir un mot de passe pour l'utilisateur racine MySQL. Utilisez le MYSQL_ROOT_PASSWORD variables 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 .

CONNEXE : Comment utiliser Docker pour conteneuriser PHP et Apache

Docker Compose

L'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 maintenable. 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 .

CONNEXE : Comment installer Docker et Docker Compose sur Linux

Connexion à MySQL

Vous pouvez obtenir un shell MySQL interactif en vous attachant au conteneur et en exécutant le mysql commande. Cela fournit l'interface de ligne de commande MySQL complète, vous pouvez donc utiliser toutes les commandes et tous les drapeaux 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 de 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 pour docker run lorsque vous démarrez votre conteneur. Vous pourrez maintenant vous connecter à localhost:33060 en utilisant des clients MySQL exécutés sur votre hôte.

Si vous avez besoin de vous connecter depuis un 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 les 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 vide et un compte utilisateur :

  • MYSQL_DATABASE – Le nom d'un schéma de base de données à créer lors de la première initialisation du serveur.
  • MYSQL_USER et MYSQL_PASSWORD – Créez un nouveau compte utilisateur initial, séparément de la root utilisateur. Si vous définissez également le MYSQL_DATABASE variable, votre nouveau compte utilisateur sera automatiquement recevoir 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 la root utilisateur. Ceci remplace le MYSQL_ROOT_PASSWORD variable. Le mot de passe généré sera émis dans 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 les environnements CI :le mot de passe peut être visible par toute personne ayant accès aux journaux des travaux !

Fichiers de départ de première exécution

Vous aurez souvent des tables et des données que vous souhaitez ensemencer 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 répertoire.

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 s'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 . Vous pouvez également lier le montage d'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. L'effacement du contenu de votre répertoire de données déclenchera une nouvelle initialisation lorsque vous redémarrerez le conteneur.

Ajuster les paramètres du serveur

Les fichiers de configuration du serveur MySQL seront chargés depuis /etc/mysql/conf.d . Ajoutez vos propres fichiers de configuration à ce répertoire, à l'aide d'un remplacement Dockerfile ou d'un montage lié, 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, les indicateurs de ligne de commande sont également disponibles pour des ajustements ponctuels et des expérimentations.

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 des requêtes général activé. Le mysql binaire est le point d'entrée de l'image, donc les drapeaux sont passés à docker run après le nom de l'image sera transmis à mysql .

Conclusion

L'exécution de MySQL dans Docker est beaucoup plus rapide et facile que l'installation de MySQL Server "bare-metal". Vous pouvez exécuter plusieurs instances MySQL sans risque de conflit.

Les images Docker officielles sont fournies avec des options de configuration utiles et une prise en charge intégrée des graines de base 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.

CONNEXE : Comment déployer rapidement WordPress en tant que conteneur Docker


Docker
  1. Comment exécuter MySQL dans Docker Container :un guide simple et facile à suivre

  2. Comment exécuter un programme dans un conteneur Docker ?

  3. Comment se connecter en SSH à un conteneur Docker

  4. Comment créer un conteneur MySQL Docker pour les tests

  5. Comment exécuter une tâche cron dans un conteneur docker

Comment exécuter la pile ELK sur Docker Container

Comment se connecter en SSH à un conteneur Docker et exécuter des commandes

Comment exécuter une application .NET dans Docker

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment exécuter des conteneurs Docker