Cet article est écrit pour les débutants de Docker qui souhaitent démarrer facilement MySQL dans un conteneur Docker. Veuillez également noter que, comme il est basé sur le développement avec Spring Boot (Frame Work), le public cible peut être limité.
L'environnement de développement est le suivant.
En termes simples, il s'agit d'un logiciel de gestion de conteneurs open source. En utilisant le conteneur Docker, il est possible d'accélérer la création et le déploiement d'applications. Veuillez vous référer à ce qui suit car les explications détaillées seront sautées. Qiita:https://qiita.com/gold-kou/items/44860fbda1a34a001fc1 Document officiel: https://docs.docker.com/
Un outil qui vous permet de définir et de démarrer divers conteneurs (dockers). Fondamentalement, vous pouvez définir l'environnement de service dans le fichier YAML. En outre, vous pouvez facilement démarrer avec une seule commande.
Terminal
$ docker --version
Docker version 18.03, build c97c6d6 #S'il est installé, la version sera affichée
$ docker-compose --version
docker-compose version 1.22.0, build 8dd22a9
$ docker-machine --version
docker-machine version 0.14.0, build 9ba6da9
La structure des répertoires est la suivante.
Constitution
sample-project/
├ docker/
| └ mysql/
| ├ conf.d/
| | └ my.cnf
| ├ initdb.d/
| | ├ schema.sql
| | └ testdata.sql
| └ Dockerfile
└ docker-compose.yml
Le ** Dockerfile ** est comme une instruction pour commander le type d'image à construire. Pour utiliser la version 5.7 de MySQL, écrivez ce qui suit pour créer l'image officielle.
Dockerfile
FROM mysql:5.7
RUN touch /var/log/mysql/mysqld.log #Créez un fichier pour vous connecter à l'emplacement spécifié
Vous pouvez configurer plusieurs services dans ce fichier YAML. Plus précisément, vous pouvez spécifier le numéro de port de chaque service et définir la zone de stockage (volume).
docker-compose.yml
version: '3.3'
services:
db:
build: ./docker/mysql
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: sample_db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "3314:3306"
volumes:
- ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
- ./docker/mysql/conf.d:/etc/mysql/conf.d
- ./log/mysql:/var/log/mysql
Ici, vous pouvez configurer MySQL.
my.cnf
[mysqld]
character-set-server=utf8mb4 #Code de caractère utilisé par le serveur mysql
explicit-defaults-for-timestamp=1 #Recommandé si la table comporte des colonnes de type TimeStamp
general-log=1 #Tout l'historique des requêtes exécutées est enregistré (il semble être désactivé par défaut)
general-log-file=/var/log/mysql/mysqld.log #Destination de sortie du journal
[client]
default-character-set=utf8mb4 #Code de caractère utilisé par le côté client de mysql
Je veux créer la table comme processus d'initialisation, alors préparez un fichier DDL.
schema.sql
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL,
email VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
);
Vous pouvez préparer les données dans le tableau à l'avance.
testdata.sql
INSERT INTO users (id,name,email) VALUES (1, 'TOM','[email protected]');
Exécutez la commande suivante dans le répertoire racine du projet.
Terminal
$ docker-compose up -d #Créer et démarrer un conteneur
Creating network "sample-project_default" with the default driver
Creating sample-project_db_1 ... done
$ docker-compose ps #Afficher une liste de conteneurs existants
Name Command State Ports
--------------------------------------------------------------------------------
sample-project_db_1 docker-entrypoint.sh Up 0.0.0.0:3314->3306/tcp
mysqld , 33060/tcp
↓ Autres commandes ↓
$ docker-compose stop #Arrêtez le service
$ docker-compose down #Arrêtez et supprimez les conteneurs et supprimez tous les réseaux et zones de stockage
Maintenant, connectons-nous à Mysql lancé avec docker-compose.
Terminal
$ docker exec -it sample-project_db_1 bash # sample-project_db_Entrez le conteneur 1 et exécutez la commande
# mysql -u user -p #s'identifier
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> use sample_db;
Database changed
Database changed
mysql> show tables; #Vérifiez si la table est faite
+---------------------+
| Tables_in_sample_db |
+---------------------+
| users |
+---------------------+
1 row in set (0.00 sec)
mysql> select * from users; #Vérifiez si les données préparées sont incluses
+----+------+-----------------+
| id | name | email |
+----+------+-----------------+
| 1 | TOM | [email protected] |
+----+------+-----------------+
1 row in set (0.00 sec)
Si tel est le cas, vous vous connectez uniquement à Mysql depuis l'intérieur du conteneur, changez donc la méthode de connexion et vérifiez. Connectez-vous en spécifiant le nom d'hôte et le port. (S'il n'est pas spécifié, il semble se connecter au port par défaut 3306)
Terminal
$ mysql --host 127.0.0.1 --port 3314 -u user -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g
・
・
mysql>
Assurez-vous que le fichier se trouve à l'emplacement que vous avez défini précédemment.
Structure du répertoire
sample-project/
├ docker
├ log/
| └ mysql/
├ src └ mysqld.log
|
└ docker-compose.yml
Le contenu du fichier ressemble à ceci.
mysqld.log
mysqld, Version: 5.7.23-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
2018-10-13T11:38:04.918533Z 1 Query CREATE DATABASE mysql;
2018-10-13T11:38:04.919437Z 1 Query USE mysql;
・
・
Ce qui suit est omis
Cette fois, tous les journaux de requêtes sont définis pour être sortis, donc la taille du fichier semble être assez grande (6,71 Mo).
J'ai une faible compréhension du concept de conteneurs, donc j'ai l'impression de le faire, mais c'est plus facile que d'installer MySQL localement et de jouer avec, et cela ne pollue pas l'environnement local, alors j'ai décidé de l'utiliser de plus en plus. Je ne l'ai pas présenté cette fois, mais j'espère pouvoir partager la procédure de connexion à partir d'une application développée avec Springboot à l'avenir.
Recommended Posts