StreamlitアプリをDockerでAWSにデプロイする
DockerでWebアプリを構築する練習メモ(私的備忘録として)
ローカル環境 Windows10 home
2022年GWを利用して集中して行った。
Dockerの内容は、かめさんのUdemy講座を参考にしてます。
とても分かりやすい講座で、ありがたいです。
Windowsで、Linux仮想環境とDockerを使えるようにする。
こちらを参照。
ローカル(WindowsPC)でStreamlitを動かす
DockerFileの記述内容
FROM python:3.7.13
RUN pip install streamlit
ENTRYPOINT ["streamlit"]
CMD ["hello"]
EXPOSE 8501
※ ENTRYPOINTはdocker runの時に上書きできないコマンド
※ ENTRYPOINTがある場合は、CMDはコマンドの引数を指定する
docker buildしてrun
> Powershellで実行
>docker build .
>docker run -it -d -p 8888:8501 imageID
※ -d runしたらdetuchする(動いたままにする)
※ -p HostのポートとCoitainerのポートをつなげる
ブラウザで、localhost:8888 にアクセスしたら、Streamlitのデモが動いた!
次に、簡単なpythonプログラミングをstreamlitで動かしみる。
プログラムファイル write_hello.py
import streamlit as st
st.write('Hell World !')
をdocker fileのあるフォルダに保存して、docker imageにCopyする。
DockerFile内容
FROM python:3.7.13
RUN pip install streamlit
RUN mkdir /code # コンテナにディレクトリを作る
COPY write_hello.py /code/ # プログラムをdocker imageにコピーする
CMD ["bin/bash"]
EXPOSE 8501
buildしてrunする。
>docker build .
>docker run -it -p 8889:8501 imageID bash
Ubuntuが立ち上がり、codeフォルダにwrite_hello.pyがコピーされていることを確認。
# コンテナubuntuで実行
# ls code/
stremalitを動かしてみる。
# streamlit run code/write_hello.py
おー、http://localhost:8889/に streamlitでHello World! が表示された!
DockerFileを編集して、Docker runしたら、このプログラムが立ち上がるようにしてみよう。
DockerFileの内容
FROM python:3.7.13
RUN pip install streamlit
RUN mkdir /code
COPY write_hello.py /code/
ENTRYPOINT ["streamlit"] # コマンド
CMD ["run", "code/write_hello.py"] # 引数が2つ
EXPOSE 8501
>docker build .
>docker run -it -d -p 8889:8501 imageID
おー、http://localhost:8889/に streamlitでHello World! が表示された!
このコンテナをAWSで動かしてみる。
AWSへの登録する
詳細は省略。
AWSでインスタンスを作成し、アクセスするkeyを作成して、ダウンロードしておく。
keyファイル xxxxx.pem
作成したインスタンスにログインする
SSHでアクセスする。
>Powershellで実行
> ssh -i xxxxx.pem ubuntu@パブリック IPv4 アドレス
パブリック IPv4 アドレス:AWSのインスタンス管理ページからコピペ)
xxxxx.pemはkeyファイル。
適当なディレクトリに保存して、sshの引数(path+ファイル名)で指定する。
AWSにログインできたら、ちょっと確認してみる。
$ ls
$ pwd
ubuntuが動いているのを確認する。
awsにdockerをインストールする
$ sudo apt-get update
$ sudo apt-get install docker.io
dockerのバージョン確認、兼、インストール完了確認。
$ dokcer --version
dockerコマンドをsudoなしでubuntuユーザでできるようにdockerグループを作る
dockerは、rootでないと動かせない(デフォルト)。
$ sudo gpasswd -a ubuntu docker ※有効にするには、この後、再ログインが必要
$ docker images で、sudoなしで動くのを確認
Dockerfileを送って、buidする
※GithubでDockerfileを管理するのが一般的。
AWSにsftpでログインする。
> sftp -i xxxxx.pem ubuntu@パブリック IPv4 アドレス
ローカルhostにあるDockerfileとpythonコードをAWSに送る。
sftp> put C:\...省略...\Dockerfile streamlit_build
sftp> put C:\...省略...\write_hello.py streamlit_build
streamlit_buidはAWS側に事前に作成しておいたビルドコンテキスト用の
ディレクトリ
sftp> exit
sshでログイン
> ssh-i xxxxx.pem ubuntu@パブリック IPv4 アドレス
$ cd streamlit_build
$ ls Dockerfileとpythonプログラムが転送されてるのを確認
buildする
$ docker build .
docker run する
$ docker run -p 8501:8501 imageID
ブラウザでアクセスする。
パブリック IPv4 アドレス:8501 つ、つ、繋がらない...。
タイムアウトのようだ。
AWSインスタンスのセキュリティの設定が悪いのかもしれない。
セキュリティのインバウンドルールを確認すると、タイプが「SSH」になっていた。
これを、「すべてのトラフィック」に変更して、再チャレンジ。
ブラウザで、パブリック IPv4 アドレス:8501 にアクセスしたら、
streamlitが立ち上がって、Hello World ! と表示された。
Yes! Yes! Yes! Yes!!!
次は、CICDでパイプラインでデプロイするのを試したい。
この記事が気に入ったらサポートをしてみませんか?