[JAVA] Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen

Dieser Artikel richtet sich an Docker-Anfänger, die MySQL einfach in einem Docker-Container starten möchten. Beachten Sie außerdem, dass die Zielgruppe möglicherweise eingeschränkt ist, da sie auf der Entwicklung mit Spring Boot (Frame Work) basiert. vertical.png

Annahme

--Was ist Docker? Verschaffen Sie sich einen groben Überblick --Docker für Mac muss installiert sein

Die Entwicklungsumgebung ist wie folgt.

Entwicklungsumgebung

Was ist Docker überhaupt?

Einfach ausgedrückt handelt es sich um eine Open Source-Containerverwaltungssoftware. Mithilfe des Docker-Containers können Sie die Erstellung und Bereitstellung von Anwendungen beschleunigen. Bitte beachten Sie das Folgende, da detaillierte Erklärungen übersprungen werden. Qiita:https://qiita.com/gold-kou/items/44860fbda1a34a001fc1 Offizielles Dokument: https://docs.docker.com/

Was ist Docker Compose? ??

Ein Tool, mit dem Sie verschiedene Container (Docker) definieren und starten können. Grundsätzlich können Sie die Serviceumgebung in der YAML-Datei festlegen. Sie können auch ganz einfach mit nur einem Befehl loslegen.

Was ist diesmal zu tun?

Verfahren

1. Überprüfen Sie, ob Docker installiert ist

Terminal


$ docker --version
Docker version 18.03, build c97c6d6 #Wenn installiert, wird die Version angezeigt

$ docker-compose --version
docker-compose version 1.22.0, build 8dd22a9

$ docker-machine --version
docker-machine version 0.14.0, build 9ba6da9

2. Erstellen Sie eine Docker-Datei

Die Verzeichnisstruktur ist wie folgt.

Verfassung


sample-project/
             ├ docker/
             |       └ mysql/
             |              ├ conf.d/
             |              |       └ my.cnf
             |              ├ initdb.d/
             |              |         ├ schema.sql
             |              |         └ testdata.sql
             |              └ Dockerfile
             └ docker-compose.yml                      

Das ** Dockerfile ** ist wie eine Anweisung, um zu bestellen, welche Art von Image erstellt werden soll. Um Version 5.7 von MySQL zu verwenden, schreiben Sie Folgendes, um das offizielle Image zu erstellen.

Dockerfile


FROM mysql:5.7
RUN touch /var/log/mysql/mysqld.log #Erstellen Sie eine Datei, um sich am angegebenen Speicherort anzumelden

3. Erstellen Sie docker-compose.yml

Sie können mehrere Dienste in dieser YAML-Datei konfigurieren. Insbesondere können Sie die Portnummer jedes Dienstes angeben und den Speicherbereich (Volume) festlegen.

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. Erstellen Sie my.cnf

Hier können Sie MySQL konfigurieren.

my.cnf


[mysqld]
character-set-server=utf8mb4       #Zeichencode, der von der MySQL-Serverseite verwendet wird
explicit-defaults-for-timestamp=1   #Empfohlen, wenn die Tabelle Spalten vom Typ TimeStamp enthält
general-log=1                   #Der gesamte Verlauf der ausgeführten Abfragen wird aufgezeichnet (standardmäßig ist er AUS).
general-log-file=/var/log/mysql/mysqld.log #Protokollausgabeziel

[client]
default-character-set=utf8mb4               #Zeichencode, der von der Client-Seite von MySQL verwendet wird

5. Erstellen Sie eine Tabellendefinitionsdatei

Ich möchte die Tabelle als Initialisierungsprozess erstellen, also bereite eine DDL-Datei vor.

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. Erstellen Sie Testdaten

Sie können die Daten in der Tabelle im Voraus vorbereiten.

testdata.sql


INSERT INTO users (id,name,email) VALUES (1, 'TOM','[email protected]');

7. Führen Sie den Befehl docker-compose aus

Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus.

Terminal


$ docker-compose up -d #Erstellen und starten Sie einen Container
Creating network "sample-project_default" with the default driver
Creating sample-project_db_1 ... done

$ docker-compose ps #Zeigen Sie eine Liste der vorhandenen Container an
        Name                   Command           State           Ports         
--------------------------------------------------------------------------------
sample-project_db_1    docker-entrypoint.sh     Up      0.0.0.0:3314->3306/tcp
                       mysqld                           , 33060/tcp  

↓ Andere Befehle ↓
$ docker-compose stop #Beenden Sie den Dienst
$ docker-compose down #Stoppen und löschen Sie Container und löschen Sie alle Netzwerke und Speicherbereiche

8. Versuchen Sie, eine Verbindung zum gestarteten MySQL herzustellen

Lassen Sie uns nun eine Verbindung zu MySQL herstellen, das mit Docker-Compose gestartet wurde.

Terminal


$ docker exec -it sample-project_db_1 bash # sample-project_db_Geben Sie den Container 1 ein und führen Sie den Befehl aus
# mysql -u user -p #Anmeldung
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> use sample_db;
Database changed

Database changed
mysql> show tables; #Überprüfen Sie, ob die Tabelle erstellt wurde
+---------------------+
| Tables_in_sample_db |
+---------------------+
| users               |
+---------------------+
1 row in set (0.00 sec)

mysql> select * from users; #Überprüfen Sie, ob die vorbereiteten Daten enthalten sind
+----+------+-----------------+
| id | name | email           |
+----+------+-----------------+
|  1 | TOM  | [email protected] |
+----+------+-----------------+
1 row in set (0.00 sec)

Wenn dies der Fall ist, stellen Sie nur innerhalb des Containers eine Verbindung zu MySQL her. Ändern Sie daher die Verbindungsmethode und überprüfen Sie sie. Melden Sie sich an, indem Sie den Hostnamen und den Port angeben. (Wenn nicht angegeben, scheint es eine Verbindung zum Standardport 3306 herzustellen.)

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. Überprüfen Sie das Protokoll

Stellen Sie sicher, dass sich die Datei an dem zuvor festgelegten Speicherort befindet.

Verzeichnisaufbau


sample-project/
              ├ docker
              ├ log/
              |    └ mysql/
              ├ src       └ mysqld.log
              |
              └ docker-compose.yml

Der Inhalt der Datei sieht folgendermaßen aus.

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;
・
・
Folgendes wird weggelassen

Dieses Mal sind alle Abfrageprotokolle so eingestellt, dass sie ausgegeben werden, sodass die Dateigröße ziemlich groß zu sein scheint (6,71 MB).

Impressionen

Ich habe ein geringes Verständnis für das Konzept von Containern, daher habe ich das Gefühl, dass ich es irgendwie mache, aber es ist einfacher als MySQL lokal zu installieren und damit herumzuspielen, und es verschmutzt die lokale Umgebung nicht. Deshalb habe ich beschlossen, es immer mehr zu verwenden. Ich habe es diesmal nicht eingeführt, aber ich hoffe, ich kann das Verfahren für die Verbindung von einer mit Springboot entwickelten Anwendung in Zukunft teilen.

Andere Referenzseiten

Recommended Posts

Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, grafana und postgres [docker-compose] zu verknüpfen
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Ich habe versucht, mit Spring Data JPA zu beginnen
[Java] Ich habe versucht, über den Verbindungspool eine Verbindung mit Servlet (Tomcat) & MySQL & Java herzustellen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
[Java] Ich habe JDBC installiert und versucht, eine Verbindung mit Servlet + MySQL herzustellen. (Es gibt eine Version mit DAO / Bean)
Versuchen Sie, MySql und Blazor mit Docker-Compose auszuführen
Ich habe versucht, mithilfe von JDBC Template mit Spring MVC eine Verbindung zu MySQL herzustellen
01. Ich habe versucht, eine Umgebung mit SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10) zu erstellen.
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich habe auch Web Assembly mit Nim und C ausprobiert
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Rails-Anfänger haben versucht, mit RSpec zu beginnen
Fehler beim Bereitstellen von Rails5 + MySQL auf Heroku mit Docker-Compose
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, mit Gradle auf Heroku zu beginnen
[Java] Stellen Sie eine Verbindung zu MySQL her
In dieser Zeit habe ich versucht, Java Bean und XML mit dem Jackson-Formatierer XML zu konvertieren
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
So verbinden Sie MySQL / MariaDB + HikariCP mit Liferay 7 / DXP
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich habe versucht, AWS I oT Button und Slack zu integrieren
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich habe versucht, C # zu kauen (Dateien lesen und schreiben)
Ich habe versucht, mit Java und Spring eine Funktion / einen Bildschirm für den Administrator einer Einkaufsseite zu erstellen
[Azure] Ich habe versucht, eine kostenlose Java-App zu erstellen ~ Mit FTP verbinden ~ [Anfänger]
Ich habe DI mit Ruby versucht
Stellen Sie mit Java eine Verbindung zur Datenbank her
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Verbinde dich mit Eclipse mit Orakel!
[Android] Verbindung zu MySQL herstellen (unvollendet)
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
Ich habe versucht, Rubys "Klassen" -Probleme zu sammeln und zu lösen.
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
Stellen Sie mit aktiviertem SSL in JDBC eine Verbindung zu mehreren MySQL-Instanzen her
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe versucht, Java Optional und Guard-Klausel koexistieren zu lassen