Docker MySQL 開発環境構築

## Dockerを起動する
```shell-session
$ sudo service docker start
[sudo] password for dxrdxr:
 * Starting Docker: docker                                                                             [ OK ]
```
```shell-session
$ docker version
Client: Docker Engine - Community
 Version:           23.0.3
 API version:       1.42
 Go version:        go1.19.7
 Git commit:        3e7cbfd
 Built:             Tue Apr  4 22:05:48 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.3
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.7
  Git commit:       59118bf
  Built:            Tue Apr  4 22:05:48 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.20
  GitCommit:        2806fc1057397dbaeefbea0e4e17bddfbd388f38
 runc:
  Version:          1.1.5
  GitCommit:        v1.1.5-0-gf19387a
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```
## imageをpullする
```shell-session
$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
558b7d69a2e5: Pull complete
2cb5a921059e: Pull complete
b85878fb9bb2: Pull complete
d16f3fd26a82: Pull complete
afd51b5329cb: Pull complete
374d2f7f3267: Pull complete
4ea1bb2c9574: Pull complete
1c9054053605: Pull complete
d79cd2da03be: Pull complete
e3a1aa788d17: Pull complete
Digest: sha256:d7c20c5ba268c558f4fac62977f8c7125bde0630ff8946b08dde44135ef40df3
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
```
## imageを確認する
```shell-session
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    56b21e040954   2 weeks ago   632MB
```
## MySQLを起動する
```shell-session
$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql
93567b5903795d4935f5e827d2a7161248a049d8499d8d0f8a2fb85771b2f568
```
## containerを確認する
```shell-session
$ docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                 NAMES
93567b590379   mysql     "docker-entrypoint.s…"   39 seconds ago   Up 37 seconds   3306/tcp, 33060/tcp   my-mysql
```
## MySQLステータスを確認する
```shell-session
$ docker exec -it my-mysql bash -p
bash-4.4# mysql -u root -p -h 127.0.0.1
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> status
--------------
mysql  Ver 8.3.0 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id:          8
Current database:
Current user:           root@127.0.0.1
SSL:                    Cipher in use is TLS_AES_128_GCM_SHA256
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.3.0 MySQL Community Server - GPL
Protocol version:       10
Connection:             127.0.0.1 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    latin1
Conn.  characterset:    latin1
TCP port:               3306
Binary data as:         Hexadecimal
Uptime:                 6 min 9 sec

Threads: 2  Questions: 6  Slow queries: 0  Opens: 119  Flush tables: 3  Open tables: 38  Queries per second avg: 0.016
--------------

mysql> quit
Bye
bash-4.4# exit
exit
```
## ポートを指定してMySQLを再起動する
起動中のcontainerを停止します
```shell-session
$ docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                 NAMES
93567b590379   mysql     "docker-entrypoint.s…"   7 minutes ago   Up 7 minutes   3306/tcp, 33060/tcp   my-mysql
```
```shell-session
$ docker container stop my-mysql
my-mysql
```
今のcontainerを削除します
```shell-session
$ docker container rm my-mysql
my-mysql
```
```shell-session
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
```
ポートを指定してMySQLを再起動します
```shell-session
$ docker run -it --name my-mysql -e MYSQL_ROOT_PASSWORD=admin -p 3306:3306 -d mysql
4de1d0c3b318fc9a4082c7cb89469282e6114b9b09cf7a0b8652471c7d006726
```
```shell-session
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS
                           NAMES
4de1d0c3b318   mysql     "docker-entrypoint.s…"   10 seconds ago   Up 9 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my-mysql
```
## DATABASEを作成します
```shell-session
$ docker container exec -it my-mysql sh
sh-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE my_db_01 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db_01           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
```
## クライアントから接続します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3184769/c05592b3-50de-0613-850c-07405da441a6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3184769/5316e192-f1a4-4e16-beca-451d3f8e0c1e.png)