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.
--Was ist Docker? Verschaffen Sie sich einen groben Überblick --Docker für Mac muss installiert sein
Die Entwicklungsumgebung ist wie folgt.
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/
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.
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
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
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
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
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)
);
Sie können die Daten in der Tabelle im Voraus vorbereiten.
testdata.sql
INSERT INTO users (id,name,email) VALUES (1, 'TOM','[email protected]');
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
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>
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).
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.
Recommended Posts