目的
DataSaberになるための奮闘記です。
この記事は、次のシリーズ3つ目の記事となります。
- TabPy とTableauを接続してみる
- TabPyとTableauで機械学習してみる
- TabPyをDockernizeしてみる ← これ!
前回、TabPyサーバに機械学習モデルをデプロイしました。
今回はその環境をDockernizeします。
Dockernizeすることでコード化された環境をチームやメンバに共有可能になり、再現性と再利用性が高まるメリットがあります。
動作環境
DockerおよびDocker composeのバージョンは以下の通りです。
その他の動作環境は前回と同様です。
$ docker --version
Docker version 27.2.1, build 9e34c9b
$ docker-compose -v
docker-compose version 1.27.4, build 40524192
ファイルを作成する
1. Dockerfileを作る
python3.8をベースに必要なライブラリをインストールします。
ライブラリのバージョンを固定するならrequirement.txtを作成してもよいですね。
FROM python:3.8.10
RUN python3 -m pip install --upgrade pip
RUN pip install tabpy
RUN pip install tabpy_client
RUN pip install pandas
RUN pip install numpy
RUN pip install scikit-learn
2. docker-composeファイルを作成する
version: '3.8'
services:
tabpy-service:
build:
context: .
dockerfile: Dockerfile
ports:
- "9004:9004"
volumes:
- ./script/:/app
command: /bin/bash -c "tabpy --disable-auth-warning & sleep 5 && python3 /app/tabpy_deploy_ml_model_titanic.py && tail -f /dev/null"
次の手順となっています。
- Dockerファイルからイメージを作成する
- ポート9004を開放する
- ローカルの./script配下をコンテナ内の/app配下にマウントする
- 前回の記事で作成した”tabpy_deploy_ml_model_titanic.py”を./scriptに格納しておく
- commandブロックについて
- "sleep 5" はTabPyサーバが起動完了するまでの待ち時間
- TabPyサーバの起動とカスタム関数を実行
POINT
commandブロックの内容を実行後にコンテナが停止します。
そのため、下記コマンドを実行させることで、コンテナの起動を維持します。
tail -f /dev/null
同様の効果があると思われる次のオプションではコンテナが自動的に停止してしまった。
原因調査は別途したいと思います。
tty: true
stdin_open: true
イメージの作成とコンテナ起動
次のコマンドでDockerイメージのビルドとコンテナが起動されます。
$ docker-compose up --build -d
結果
起動確認後、Tableauの分析拡張機能の接続の管理から接続テストを行うと、正常にコンテナ内に立ち上げたTabPyサーバと接続できていることがわかります。
最後に
Tableau-TabPyと戯れる3つのシリーズはいかがでしたでしょうか。
個人的には長らく利用してみたかったライブラリを扱えたため、記事を執筆しながらとても勉強になりました。
Tableauでのヴィジュアライズを支える技術について、より知識を深めていきたいと心を新たにしました。
スペシャルサンクス
本記事を執筆するにあたり次のサイトを参考にさせていただきました!ありがとうございました。
https://note.com/uni_3/n/n852cd8c43c4b
https://tableaujpn.blogspot.com/2020/03/tableaupythontabpydocker.html