Dockerを使ってMySqlを立ち上げる

## はじめに
Dockerを使って開発環境用のmysqlを立てることにした。
インフラ系が苦手で少し苦労したので、構築から接続までの流れをメモに残しておく。

## 事前準備
- docker for macのインストール　（https://docs.docker.com/docker-for-mac/install/）
- my.cnfの設定（しなくても問題ないが、したほうがいい）

## 立ち上げ方
・DockerHubからMariaDBイメージをダウンロード

```
docker pull mariadb
```

・mariadbのイメージをインストールできたことを確認

```
~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mariadb             latest              2cxxxxxxxxxx        3 weeks ago         363MB
~ $ 
```

・mariadbを立ち上げる

```
docker run -v ~/tmp/mysql/:/etc/mysql/conf.d --name mariadb-server -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_DATABASE=database -e MYSQL_USER=user -d -p 63306:3306 mariadb
```

上記の設定の説明

| 項目    |    説明|    
|:-----------------|:------------------|
|-v ~/tmp/mysql/:/etc/mysql/conf.d            | 公式だと/etc/mysql/conf.d配下のmy.cnfを読みに行くからマウンティングさせる|     
| --name mariadb-server        |    タグ名を指定|       
| -e MYSQL_ROOT_PASSWORD="password"      |     passwordを指定|        
| -e MYSQL_DATABASE=database          |    database名を指定 |        
| -e MYSQL_USER=user          |  user名を指定|       
| -p 63306:3306       |    ホストの63306を3306にフォワード|    
| mariadb      |  イメージの指定|    


## 文字コードをUTF8にする
上記の立ち上げ方では、-v ~/tmp/mysql/:/etc/mysql/conf.d を設定している。

設定せずに起動すると。。。

```
docker run --name mariadb-server -e MYSQL_ROOT_PASSWORD="password" -e MYSQL_DATABASE=database -e MYSQL_USER=user -d -p 63306:3306 mariadb
```

以下のように文字コードがUTF8でないので、日本語が文字化ける

```
MariaDB [sample]> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

文字化けを解消するには、起動の際に設定ファイルを読ませる。
読ませるためのファイルも以下のように作成すること

```
~ $ cat ~/tmp/mysql/my.cnf 
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
~ $ 
```

設定しておけば以下のように文字コードがUTF8になる

```
MariaDB [sample]> SHOW VARIABLES LIKE "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

## Dockerの簡単な操作
・起動しているコンテナの確認

```
docker ps
```

・停止しているコンテナの確認

```
docker ps -a
```

・起動したコンテナを止める

```
docker stop {コンテナID}
```

・コンテナを指定して起動する

```
docker start {コンテナID}
```

・コンテナからmysqlに接続

```
// コンテナに入る
docker exec -it {コンテナID} bash
// コンテナからmysqlに入る
mysql -u root -p
```

・外部からmysqlに接続
※ localhostにするとホストのmysqlに接続しようとする。127.0.0.1で設定すること

```
mysql -uroot -ppassword -h 127.0.0.1 -P 63306
```

### Enjoy your docker life