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