GCEとCloudSQLとDockerでmetabase
- metabaseってなんぞ?
- GCE(Container-Optimized OS)作成
- ユーザー定義bridgeネットワーク作成
- CloudSQLへのプロキシコンテナ作成
- metabase コンテナ作成
- PINGで疎通確認
- おまけ
metabaseってなんぞ?
データ可視化OSSです OSSのデータ可視化ツール「Metabase」が超使いやすい ちょっとつかってみた感じ、すこぶる良いです データ分析は全部こいつにぶん投げるのがとてもよさそう
GCE(Container-Optimized OS)作成
インスタンスの作成と設定 | Container-Optimized OS | Google Cloud
* コンソールのブートディスクからContainer-Optimized OSを選択する
* CloudSQLに接続可能なサービスアカウントCloudSQLClient
を作成し設定する(詳細省略)
* HTTP/HTTPSを開ける
ユーザー定義bridgeネットワーク作成
metanet
というbridgeネットワークを作成し各コンテナの起動時に指定する
これで同一ネットワーク内でコンテナを起動できる
docker network create -d bridge metanet
CloudSQLへのプロキシコンテナ作成
Cloud SQL Proxy Docker イメージを使用して MySQL クライアントを接続する | Cloud SQL for MySQL | Google Cloud
docker pull gcr.io/cloudsql-docker/gce-proxy:1.11
docker run --name cloud_sql_proxy --net=metanet -d \ -v /mnt/stateful_partition/cloudsql:/cloudsql \ -p 3306:3306 \ gcr.io/cloudsql-docker/gce-proxy:1.11 /cloud_sql_proxy \ -instances=planet-pluto-dev:asia-northeast1:mysql-dev=tcp:0.0.0.0:3306
ここでのポイントはポートをホストのローカル127.0.0.1
でバインドする必要がないこと
metanet
経由のコンテナ間通信を行い、ポート3306でCloudSQLにプロキシ接続する
あとは--net=metanet
を指定するのを忘れないこと
metabase コンテナ作成
docker run -d -p 80:3000 --name metabase --net=metanet metabase/metabase
同じように--net=metanet
を指定する
PINGで疎通確認
これで、metanet
内ではコンテナ名で名前解決可能になる
コンテナ内からPINGで疎通確認
docker exec -it metabase /bin/bash
ping cloud_sql_proxy
疎通できていたらmetabaseからMySQLをDBに設定
HOST : cloud_sql_proxy PORT : 3306
で接続できるはず
おまけ
ちなみに最初は docker-compose を使って接続していた
ただContainer-Optimized OSにdocker-compose をインストールするのが手間なので、オススメしない
Running Docker Compose with Docker | Google Cloud Platform Community | Google Cloud
一応そのときのdocker-compose.yml
を貼っとく
version: '2' services: cloud_sql_proxy: image: gcr.io/cloudsql-docker/gce-proxy:1.11 container_name: cloud_sql_proxy command: - "/cloud_sql_proxy" - "-instances=planet-pluto-dev:asia-northeast1:mysql-dev=tcp:0.0.0.0:3306" volumes: - /mnt/stateful_partition/cloudsql:/cloudsql ports: - "3306:3306" metabase: image: metabase/metabase container_name: metabase volumes: - /mnt/stateful_partition/tmp:/tmp environment: - "MB_DB_FILE=/mnt/stateful_partition/metabase.db" ports: - "80:3000"