MetabaseとMySQL環境をDockerで作る


はじめに

株価などネットから取得したデータをMySQLに格納し、
それを可視化したかったのでMetabsaeを試してみました。

環境作成にあたり、Dockerを利用しています。

環境

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

参考

今回やりたい構成

ディレクトリ構成

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

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

環境作成

イメージがないこと確認

$ docker-compose images
Container   Repository   Tag   Image Id   Size
----------------------------------------------

docker compose用のファイル準備

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

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

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

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

イメージを取得

$ 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

起動

$ docker-compose up -d
Starting mysql ... done
Starting metabase ... done

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

動作確認(MySQL)

$ 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に格納する
で作ったPythonコードでMySQLにデータを格納しています。

Metabaseの設定

初期セットアップ

http://localhost:3000/setup

にアクセス

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

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

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

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

おまけ

停止

$ docker-compose stop
Stopping metabase ... done
Stopping mysql    ... done

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

$ docker-compose start
Starting mysql    ... done
Starting metabase ... done

環境削除

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

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

環境削除(imageも削除)

上に加えて、imageも削除

$ 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