MetabaseとMySQL環境をDockerで作る 

## はじめに

株価などネットから取得したデータをMySQLに格納し、
それを可視化したかったのでMetabsaeを試してみました。  
環境作成にあたり、Dockerを利用しています。

## 環境

* Mac OS X 10.14.2
* Docker version 18.09.0
* docker-compose version 1.23.2

## 参考

* [Metabase Get Start](https://www.metabase.com/start/)

## 今回やりたい構成

![Metabase_MySQL.png](https://qiita-image-store.s3.amazonaws.com/0/223761/b1a4f963-76e4-ceb9-9efd-16c1c0780d62.png)

## ディレクトリ構成

```bash-session
.
├── Data
│   └── mysql_data
└── Docker
    └── docker-compose.yml
```

永続化のためmysql_dataにMySQLのファイルを置きます。

## 環境作成

### イメージがないこと確認

```bash-session
$ docker-compose images
Container   Repository   Tag   Image Id   Size
----------------------------------------------
```

### docker compose用のファイル準備

docker-compose.ymlでみて欲しいところは以下

* `links`にmysqlと記載することで、Docker内はmysqlで名前解決できる。

* `volumes`にローカルのファイルをDockerコンテナにマウントする設定を記載することによってMySQLのデータをローカルに保存している。その結果データを永続化できる。

```docker-compose:docker-compose.yml
version: "3"
services:
  metabase:
    container_name: metabase
    image: metabase/metabase
    ports:
      - "3000:3000"
    links:
      - mysql
  mysql:
    container_name: mysql
    image: mysql:5.7.22
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: stock
      MYSQL_USER: stock
      MYSQL_PASSWORD: stock
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ../Data/mysql_data/:/var/lib/mysql
```

### イメージを取得

```bash-session
$ docker-compose create
WARNING: The create command is deprecated. Use the up command with the --no-start flag instead.
Pulling mysql (mysql:5.7.22)...
5.7.22: Pulling from library/mysql
be8881be8156: Pull complete
c3995dabd1d7: Pull complete
9931fdda3586: Pull complete
bb1b6b6eff6a: Pull complete
a65f125fa718: Pull complete
2d9f8dd09be2: Pull complete
37b912cb2afe: Pull complete
79592d21cb7f: Pull complete
00bfe968d82d: Pull complete
79cf546d4770: Pull complete
2b3c2e6bacee: Pull complete
Pulling metabase (metabase/metabase:)...
latest: Pulling from metabase/metabase
4fe2ade4980c: Already exists
6fc58a8d4ae4: Pull complete
819f4a45746c: Pull complete
cfead1870569: Pull complete
80eef12953dc: Pull complete
8ea161a68113: Pull complete
db7c1ab963fb: Pull complete
Creating mysql ... done
Creating metabase ... done

$ docker-compose images
Container      Repository        Tag       Image Id      Size
--------------------------------------------------------------
metabase    metabase/metabase   latest   0e41d8de8452   221 MB
mysql       mysql               5.7.22   6bb891430fb6   355 MB
```

### 起動

```bash-session
$ docker-compose up -d
Starting mysql ... done
Starting metabase ... done
```

-dをつけてデタッチドモードにしないと、ターミナルに戻ってこれない。

## 動作確認(MySQL)

```bash-session
$ mysql --host=127.0.0.1 --user=stock --password
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| stock              |
+--------------------+
2 rows in set (0.02 sec)
```

### データ格納

[Pythonで株価情報を取得して、MySQLに格納する](https://qiita.com/ITNewcomer/items/513ef4504038b7f935ae)
で作ったPythonコードでMySQLにデータを格納しています。

## Metabaseの設定

### 初期セットアップ

<http://localhost:3000/setup>  
にアクセス

<img width="1440" alt="ss_Metabase_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/517d4402-5b81-f5fd-3187-1bb280ef5aa2.png">

<img width="1440" alt="ss_Metabase_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/5910810c-a8c4-3fb1-c310-69166b397f0a.png">

<img width="1440" alt="ss_Metabase_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/20aa9923-095d-a56e-582e-4d48c79d97d8.png">

docker-compose.ymlの`links`に記載したmysqlがホスト名

<img width="1440" alt="ss_Metabase_05.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/47bc3b60-9e9d-1ba7-3398-08cbe0c66fbc.png">

<img width="1440" alt="ss_Metabase_06.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/fb840c25-75a7-b665-8c49-74e2841c2a85.png">

<img width="1440" alt="ss_Metabase_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/07a1de54-52d6-c442-7675-fd1381d3ed69.png">


今回は事前にデータをMySQLに表を作成していたので、MySQLに入っている表の一覧が表示される。

<img width="1440" alt="ss_Metabase_08.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/87d39657-6b92-4200-8405-82209e179d6c.png">


表の名前をクリックすると、勝手にSummaryしている。

<img width="1440" alt="ss_Metabase_09.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/53017b45-6271-a0fd-5cc1-141325acdf28.png">


もちろん表のデータから色々なグラフ(円グラフや棒グラフ、線グラフ)などをSQLからも作成可能。

<img width="1440" alt="ss_Metabase_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/223761/592d397a-be78-1158-c1c2-58d11bf78577.png">


## おまけ

### 停止

```bash-session
$ docker-compose stop
Stopping metabase ... done
Stopping mysql    ... done
```

### 起動(環境削除していない場合)

```bash-session
$ docker-compose start
Starting mysql    ... done
Starting metabase ... done
```

### 環境削除

コンテナを停止し、そのコンテナとネットワークを削除

```bash-session
$ docker-compose down
$ docker-compose down
Stopping metabase ... done
Stopping mysql    ... done
Removing metabase ... done
Removing mysql    ... done
Removing network docker_default
```

### 環境削除(imageも削除)

上に加えて、imageも削除

```bash-session
$ docker-compose down --rmi all
Removing metabase ... done
Removing mysql    ... done
Removing network docker_default
Removing image mysql:5.7.22
Removing image metabase/metabase
```