Metabase＋MySQLをdocker-composeで立ち上げる

こんばんは、@0yanです。
OSSのBIツール「[Metabase](https://www.metabase.com/)」のDockerイメージからコンテナを立ち上げ、ローカルホストのMySQLサーバーに接続しようと思っていたのですが、DockerコンテナからローカルホストのMySQLサーバーに接続するのに苦戦したため方針変更。
docker-composeでMetabaseのDockerイメージとMySQLのDockerイメージから立ち上げることにしました。
本記事はそのやり方をまとめたものです。


#環境
- Windows 10 Pro
- Docker Desktop for Windows 2.3.0.3
- PowerShell


#構成
ディレクトリの構成は以下のようにしました。

```
├── db
|   ├── data
|   ├── sql
│   └── my.cnf
|
├── app
│   └── data
|
└── docker-compose.yml
```


#各種ファイルの作成
###①docker-compose.yml
MySQLとMetabaseは公式イメージを使用します。

```yml:docker-compose.yml
version: '3'

services:

  db:
    image: mysql:5.7
    container_name: mysql-server
    environment: 
      MYSQL_ROOT_PASSWORD: xxxx
      MYSQL_DATABASE: test_db
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      TZ: 'Asia/Tokyo'
    ports:
      - 3306:3306
    volumes:
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./db/data:/var/lib/mysql
      - ./db/sql:/docker-entrypoint-initdb.d

  app:
    image: metabase/metabase:latest
    container_name: metabase
    ports:
      - 3000:3000
    volumes:
      - ./app/data:/mnt/data
```

###②my.cnf
MySQLで日本語を使用したいので、文字コードの設定をしてます。

```conf:my.cnf
[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8
```


# コンテナ立ち上げ
docker-compose.ymlがあるディレクトリで以下のコマンドを実行、起動します。

```
PS > docker-compose up -d
Creating mysql-server ... done
Creating metabase     ... done

PS > docker-compose ps                                                                            Name                 Command             State                 Ports
--------------------------------------------------------------------------------------
metabase       /app/run_metabase.sh          Up      0.0.0.0:3000->3000/tcp
mysql-server   docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
```


#Metabase起動
1分程度待機した後、ブラウザでlocalhost:3000にアクセスすると下の画面が表示されますので「開始しましょう」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/483bfec1-2701-1c2c-d8c6-bb19c923e6bf.png)

下の画面で管理者情報を登録して「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/7b6217ba-4dbe-e9c8-b6e7-b4e2aee147b3.png)

下の画面で「データベースを選択する」をクリックし、MySQLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/d453208e-c2e3-143d-5d77-16c2e458bf74.png)

下の画面が表示されますので、下表の内容を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/d09c5b41-abab-8350-3d1a-bee045a81b07.png)

| 項目　　　　　　　　　 | 入力内容 　　|
|:---------------------|:------------|
| 名前 　　　　　　　　　| 任意の名前　 |
| ホスト 　　　　　　　　| db　　　　　 |
| ポート 　　　　　　　　| 3306        |
| データベース名 　　　　| test_db     |
| データベースユーザー名 | user        |
| データベースパスワード | password    |

下の画面で「次へ」をクリックします（匿名の情報収集は許容する場合のみオンにしてください）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/0ce18696-df1d-7c6c-ab96-5b178cf7c6fb.png)

下の画面で「Metabaseを使い始める」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/9df45fb5-e321-da31-461f-65af32fa7998.png)


#MySQL接続確認
起動すると下の画面になります。
右上の「照会する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/43d9403a-5140-cf10-e105-42d44176a614.png)

下の画面で「ネイティブクエリ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/818e46aa-3903-c7a4-0424-450550b8a206.png)

下の画面で接続したデータベースの名前（上表でご自身が付けた名前。私はテストデータベースという名前にしました）をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/a7f370e9-654c-6ec3-1d42-2122a8c5cc84.png)

下の画面になりますので、任意のSQL文を入れてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373977/545cf3b4-4245-27d9-ad37-392ec21f0668.png)

なお、複数のSQL文を同時実行はできません（例えば以下のようなSQL文はNGです）。
一文ずつ実行するようにしてください。

```sql
create table employee (employee_no integer, employee_name varchar(30));
insert into employee values (1, 'Taro Yamada');
select * from employee;
```


#さいごに
「会社の数字をMetabaseでビジュアル化する」という目標のもと、
- docker
- docker-compose
- MySQL
と学んできましたが、やっと現実化できそうです。
今度はこの内容をEC2上で実行したいと思います。


#参考記事
[docker-compose でMySQL環境簡単構築](https://qiita.com/A-Kira/items/f401aea261693c395966)