Docker上でStreamlitのデモアプリを動かすことを目標とします。
ググってみたのですが、シンプルなものが少なかったので、簡単にできる手順を紹介したいと思います。
環境
Windows 10 Pro
Docker Desktop 4.1.1
Visual Studio Code 1.62.2 + Docker extension
Dockerfile作成
作業用のフォルダを作成し、Visual Studio Codeで開きます。
今回は、D:\Streamlitを作業用フォルダとします。


以下のようなメッセージが出てきたときは、Yes, I trust the authorsを選択します。

作業用フォルダをVisual Studio Codeで開いたら、New Fileアイコンをクリックし、Dockerfileというファイルを作ります。


以下のコードをDockerfileに入力し、保存します。
FROM python:3.7.12
RUN pip install streamlit
ENTRYPOINT [ "streamlit" ]
CMD [ "hello" ]
EXPOSE 8501
ベースイメージはpython:3.7.12を使いました。
StreamlitがサポートしているのはPython3.7-3.9ですので、その中から好みのものを使えばよいかと思います。
イメージサイズを削減したい場合は、python:3.7.12-slim-bullseyeを使うこともできます。
実際に試したところ、サイズは約半分に削減されました。
また、python:3.7.12-alpine3.14も試してみましたが、こちらはエラーになってしまいました。
続けて、streamlitのインストール、起動コマンドとしてstreamlitを指定し、デフォルトの起動時パラメータとしてデモプログラムのhelloを指定しました。
このように書くことで、起動時パラメータをイメージの外部から指定できますので、後に自分で書いたプログラムを起動するときでも同じイメージを利用することができます。
ポートはstreamlitのデフォルトの8501を指定しました。
Dockerイメージをビルド
次に、Dockerfileからイメージをビルドします。
Visual Studio CodeにDockerエクステンションが入っていなければインストールします。
Dockerエクステンションを使うことで、コマンドを打たなくても作業ができます。
上で作成したDockerfileを右クリックし、コンテキストメニューからBuild Imageを選択します。

コマンドパレットにstreamlit:latestと出てきます。
streamlitというのがイメージ名で、フォルダ名がデフォルトでイメージ名になります。
そのままEnterキーを押します。

ビルドが終わったら、Dockerアイコンをクリックすると、イメージが作成されたことを確認できます。

コンテナを起動
イメージが作成されたらコンテナを起動します。
Dockerエクステンションがあれば、コマンドを打たなくても起動できます。
作成されたイメージのlatestを選択して右クリックをします。
コンテキストメニューからRun Interactiveを選択すれば起動できます。
ちなみに、Runの方はデタッチモードになりますので、バックグラウンドでコンテナが動きます。

コンテナが起動したら、ブラウザでhttp://localhost:8501にアクセスします。
Streamlitのデモ画面が見れれば成功です。

終了するときにはContainersから止めたいコンテナを選択右クリックし、Stopを選択すれば止まります。
また、Run Interactiveで起動した場合には、TeminalでCtlr+Cを押すことで止めることもできます。
