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.
Sommaire
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
etMYSQL_PASSWORD
– Créez un nouveau compte utilisateur initial, séparément duroot
utilisateur. Si vous définissez également leMYSQL_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 leroot
utilisateur. Cela remplace leMYSQL_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.