Docker環境でStreamlitを起動する方法を紹介します。
Streamlitは、Pythonでデータ可視化やWebアプリケーションの開発を行うためのオープンソースフレームワークです。Streamlitを使用することで、データサイエンティストや開発者は、Pythonで書かれたコードを簡単にWebアプリケーションに変換することができます。
私の動作環境は下記になります。
Docker未インストールの方はインストール方法も紹介しておりますので、ご覧ください。
Docker構築の準備
必要なファイル・フォルダ構成は下記の通りです。各ファイルを準備してきましょう。
python3_streamlit$ tree
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── src
└── app.py
Dockerfile
Dockerfileは、Dockerイメージをビルドするために使用されるテキストファイルです。Dockerイメージは、Dockerコンテナーを作成するためのテンプレートであり、Dockerfileには、コンテナーが構成されるために必要なすべての指示を記載します。ひとまず、コピペでDockerfile
という名前で保存でよいです。
FROM python:3
COPY requirements.txt .
RUN pip3 install --upgrade pip && \
pip3 install --no-cache-dir -r requirements.txt && \
WORKDIR /src
COPY /src /src
docker-compose.yml
Docker Composeは、Dockerコンテナーを複数のサービスとして定義し、簡単に管理するためのツールです。複数のコンテナーを連携して使う際に便利です。
Docker Composeを使用する場合、複数のDockerコンテナーを定義し、それらを単一のプロジェクトとして管理できます。各コンテナーは、Dockerfileを使用して定義されます。
Docker Composeファイル(docker-compose.yml)を作成し、コンテナーを定義します。こちらもコピペでdokcer-compose.yml
という名前で保存します。
version: '3'
services:
streamlit:
restart: always
build:
context: .
dockerfile: Dockerfile
container_name: streamlit
working_dir: '/src'
tty: true
volumes:
- ./src:/src
ports:
- '8501:8501'
command: streamlit run app.py
requirements.txt
python3にインポートするモジュールを記載します。こちらに記載したモジュールをDockerImageを作成する際にダウンロードします。
今回は動作確認のため、streamlitがあれば良いですがpythonを基本的なモジュールを記載しておきます。こちらもコピペでrequirements.txt
という名前で保存してください。
streamlit
pandas
numpy
matplotlib
app.py
Pythonスクリプトになります。こちらにStreamlitで使用してデータの可視化やWebアプリケーションの作成を行います。
今回は簡単な文字を表示するのみのスクリプトにします。こちらはsrc
ディレクトリの中にapp.py
として保存します。
import streamlit as st
# title
st.title("Dash Board")
st.write("streamlit")
Dockerサービスの実装
準備したファイルのあるディレクトリに移動します。
$ cd python3_streamlit
docker-composeを使用してサービスの実行をするために、下記コマンドを実行します。環境構築に少々時間がかかります。
$ docker-compose up
環境構築が完了したら、起動確認はdocker ps -a
で確認ができます。下記のように構築した環境が確認できればOKです。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea1b1014f2bb python3_streamlit-streamlit "streamlit run app.py" 4 hours ago Up 4 hours 0.0.0.0:8501->8501/tcp, :::8501->8501/tcp streamlit
Streamlitの確認
今回はStreamlitのデフォルトポート8501で設定しているので、ウェブブラウザでhttp://localhost:8501/
にアクセスします。アクセスするとアプリケーションのが表示されます。
http://localhost:8501/
Dcoker環境にStreamlitアプリをデプロイすることができました。
終了方法
Docker Composeを使用して、複数のコンテナーを一括で停止させます。またイメージも削除することができます。
$ docker-compose down --rmi 'all'
さいごに
無事、DockerでStreamlitを実装することができました。Dockerは少々手を焼く部分があるかと思いますが、参考にしていただければ幸いです。
今回はStreamlitでは単純なテキストの表示しか行っていないですが、app.pyの内容を変更いただければアプリケーションの開発等が行えます。
コメント