[JAVA] J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter

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é. vertical.png

supposition

L'environnement de développement est le suivant.

Environnement de développement

Qu'est-ce que Docker en premier lieu ??

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/

Qu'est-ce que Docker Compose? ??

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.

Que faire cette fois

procédure

1. Assurez-vous que Docker est installé

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

2. Créez un Dockerfile

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é

3. Créez docker-compose.yml

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

4. Créez my.cnf

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

5. Créez un fichier de définition de table

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)
);

6. Créer des données de test

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]');

7. Exécutez la commande docker-compose

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

8. Essayez de vous connecter au MySQL démarré

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>

9. Vérifiez le journal

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).

Impressions

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.

Autres pages de référence

Recommended Posts

J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé de démarrer avec Web Assembly
J'ai essayé de lier grafana et postgres [docker-compose]
Connectez-vous à MySQL 8 avec Java
J'ai essayé de lire et de sortir CSV avec Outsystems
J'ai essayé de démarrer avec Spring Data JPA
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
J'ai essayé d'interagir avec Java
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
[Java] J'ai installé JDBC et essayé de me connecter avec servlet + MySQL. (Il existe une version utilisant DAO / Bean)
Essayez d'exécuter MySql et Blazor avec docker-compose
J'ai essayé de me connecter à MySQL en utilisant le modèle JDBC avec Spring MVC
01. J'ai essayé de créer un environnement avec SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10)
J'ai essayé de mesurer et de comparer la vitesse de Graal VM avec JMH
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de gérer les informations de connexion avec JMX
J'ai aussi essayé Web Assembly avec Nim et C
J'ai essayé de lier JavaFX et Spring Framework.
Les débutants de Rails ont essayé de se lancer avec RSpec
Erreur lors du déploiement de rails5 + Mysql sur heroku avec Docker-compose
J'ai essayé de casser le bloc avec java (1)
J'ai essayé de démarrer avec Gradle sur Heroku
[Java] Connectez-vous à MySQL
J'ai essayé de convertir Java Bean et XML avec le formateur XML de Jackson à cette époque
J'ai essayé ce que je voulais essayer avec Stream doucement.
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
Comment connecter MySQL / MariaDB + HikariCP avec Liferay 7 / DXP
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
J'ai essayé d'intégrer le bouton AWS I oT et Slack
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
J'ai essayé d'implémenter Sterling Sort avec Java Collector
Je veux faire des transitions d'écran avec kotlin et java!
J'ai essayé de mâcher C # (lire et écrire des fichiers)
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé DI avec Ruby
Connectez-vous à DB avec Java
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé de vérifier yum-cron
Connectez-vous à Oracle avec Eclipse!
[Android] Connectez-vous à MySQL (non terminé)
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
J'ai essayé d'augmenter la vitesse de traitement avec l'ingénierie spirituelle
J'ai essayé de collecter et de résoudre les problèmes liés à la «classe» de Ruby.
J'ai essayé de résumer les bases de kotlin et java
[Rails] J'ai essayé de créer une mini application avec FullCalendar
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
Connectez-vous à plusieurs instances MySQL avec SSL activé dans JDBC
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
J'ai essayé de faire coexister Java Optional et la clause de garde