こんばんは、@0yanです。
OSSのBIツール「Metabase」の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は公式イメージを使用します。
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で日本語を使用したいので、文字コードの設定をしてます。
[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にアクセスすると下の画面が表示されますので「開始しましょう」をクリックします。
下の画面で「データベースを選択する」をクリックし、MySQLを選択します。
項目 | 入力内容 |
---|---|
名前 | 任意の名前 |
ホスト | db |
ポート | 3306 |
データベース名 | test_db |
データベースユーザー名 | user |
データベースパスワード | password |
下の画面で「次へ」をクリックします(匿名の情報収集は許容する場合のみオンにしてください)。
下の画面で「Metabaseを使い始める」をクリックします。
#MySQL接続確認
起動すると下の画面になります。
右上の「照会する」をクリックします。
下の画面で接続したデータベースの名前(上表でご自身が付けた名前。私はテストデータベースという名前にしました)をクリックします。
下の画面になりますので、任意のSQL文を入れてみてください。
なお、複数のSQL文を同時実行はできません(例えば以下のようなSQL文はNGです)。
一文ずつ実行するようにしてください。
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上で実行したいと思います。