スポンサーリンク

【Python】DockerでStreamlitの実装

Python

Docker環境でStreamlitを起動する方法を紹介します。

Streamlitは、Pythonでデータ可視化やWebアプリケーションの開発を行うためのオープンソースフレームワークです。Streamlitを使用することで、データサイエンティストや開発者は、Pythonで書かれたコードを簡単にWebアプリケーションに変換することができます。

Streamlitの特徴
  • リアルタイムでの反応性:Streamlitは、リアルタイムでのデータ表示や更新ができるため、インタラクティブなWebアプリケーションの作成に適しています。
  • 簡単な使用方法:Streamlitは、Pythonで書かれたコードを簡単にWebアプリケーションに変換することができます。また、Pythonの様々なライブラリとも統合が容易です。
  • 多彩なコンポーネント:Streamlitには、様々な種類のコンポーネントが用意されており、データの可視化や入力フォームの作成などが簡単にできます。
  • デプロイが容易:Streamlitは、無料で利用できるため、簡単にWebアプリケーションをデプロイすることができます。

私の動作環境は下記になります。

動作環境
  • windows11(WSL2: Ubuntu22.04)
  • Docker version 23.0.4, build f480fb1
  • docker-compose version 1.21.2, build a133471

Docker未インストールの方はインストール方法も紹介しておりますので、ご覧ください。

Rakuten

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アプリをデプロイすることができました。

終了方法

h2_4

Docker Composeを使用して、複数のコンテナーを一括で停止させます。またイメージも削除することができます。

$ docker-compose down --rmi 'all'

さいごに

無事、DockerでStreamlitを実装することができました。Dockerは少々手を焼く部分があるかと思いますが、参考にしていただければ幸いです。

今回はStreamlitでは単純なテキストの表示しか行っていないですが、app.pyの内容を変更いただければアプリケーションの開発等が行えます。

コメント

タイトルとURLをコピーしました