Open5
mac OSにPython Streamlit Dockerコンテナをインストールしてみた
作業環境
- Mac Book Pro 2017 Intel Core i5デュアルコア3.1GHz
- macOS Ventura
Docker Desktopをインストール
- ダウンロードURL : https://www.docker.com/products/docker-desktop/
Dockerコンテナの動作を確認します
- hello-worldコンテナを起動します
(base) macpro:~ sharland$
sudo docker run hello-world
Password:
password
実行結果 `Hello from Docker!` と表示されます
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:6e8b6f026e0b9c419ea0fd02d3905dd0952ad1feea67543f525c73a0a790fefb
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
- Dockerイメージを確認します
(base) macpro:~ sharland$
docker images
EPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
- Dockerイメージを削除します
(base) macpro:~ sharland$
docker rmi feb5d9fea6a5
実行結果 コンテナプロセスが動いているのでエラーが表示されます
コンテナプロセスが動いているのでエラーが表示されます
Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is being used by stopped container 41649c895cdb
(base) macpro:app sharland$ コンテナプロセスを削除します
docker rm 41649c895cdb
実行結果 コンテナプロセスのコンテナIDが表示されれば成功です
実行結果 コンテナプロセスのコンテナIDが表示されれば成功です
41649c895cdb
- 再度Dockerイメージを削除します
(base) macpro:~ sharland$
docker rmi feb5d9fea6a5
実行結果 `Deleted`と表示されます
Deletedと表示されます
Untagged: hello-world:latest
Untagged: hello-world@sha256:6e8b6f026e0b9c419ea0fd02d3905dd0952ad1feea67543f525c73a0a790fefb
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
Dockerfileを作成します
- 作業用のディレクトリを作成します
(base) macpro:~ sharland$
mkdir -p ./dev/streamlit/sample && cd ./dev/streamlit/sample
- Streamlit公式のサンプルのDockerfileを作成します
(base) macpro:sample sharland$
mkdir app && cd app && vim Dockerfile
- Streamlit公式のgitHubからサンプルをクローンするDockerfileです
- ローカルからサンプルをコピーする場合には
RUN git clone
の行をCOPY . .
に置き換えます
- ローカルからサンプルをコピーする場合には
app/Dockerfile
# app/Dockerfile
FROM python:3.9-slim
WORKDIR /app
RUN apt-get update && apt-get install -y \
build-essential \
curl \
software-properties-common \
git \
&& rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/streamlit/streamlit-example.git .
RUN pip3 install -r requirements.txt
EXPOSE 8501
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
ENTRYPOINT ["streamlit", "run", "streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0"]
Dockerイメージをビルドします
docker build -t sample-app .
実行結果 `FINISHED`と表示されます
[+] Building 122.7s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 540B 0.0s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/python:3.9-slim 3.0s
=> [1/5] FROM docker.io/library/python:3.9-slim@sha256:3bab254e90bb0986e 9.1s
=> => resolve docker.io/library/python:3.9-slim@sha256:3bab254e90bb0986e 0.0s
=> => sha256:3bab254e90bb0986ead59a3d415e719439e629d0ff3 1.86kB / 1.86kB 0.0s
=> => sha256:3b84e2bcb3ecfd58ccf82cc7fb582b68097cf8296f2 1.37kB / 1.37kB 0.0s
=> => sha256:2f89942f8067165e3b02aaea7991c058c70651d790c 7.78kB / 7.78kB 0.0s
=> => sha256:bb263680fed18eecdc67f885094df6f589bafc190 31.41MB / 31.41MB 4.2s
=> => sha256:43900b2bbd7f3a41cc0b3afe622d03b882980d3997c 1.08MB / 1.08MB 1.2s
=> => sha256:0c132e701ca658c9a0648f434189e8650a3744ab4 11.16MB / 11.16MB 5.4s
=> => sha256:69deeac200aa4d5b49bacf7b79f3fc80aa7be2d4c109c93 233B / 233B 1.5s
=> => sha256:8d65da2efb8d3d4ea6a1fee2b4b6592e75d9d8907df 3.17MB / 3.17MB 3.8s
=> => extracting sha256:bb263680fed18eecdc67f885094df6f589bafc19004839d7 2.5s
=> => extracting sha256:43900b2bbd7f3a41cc0b3afe622d03b882980d3997c006ab 0.3s
=> => extracting sha256:0c132e701ca658c9a0648f434189e8650a3744ab408bc5c4 1.0s
=> => extracting sha256:69deeac200aa4d5b49bacf7b79f3fc80aa7be2d4c109c933 0.0s
=> => extracting sha256:8d65da2efb8d3d4ea6a1fee2b4b6592e75d9d8907dfbcf9f 0.4s
=> [2/5] WORKDIR /app 0.2s
=> [3/5] RUN apt-get update && apt-get install -y build-essential 58.2s
=> [4/5] RUN git clone https://github.com/streamlit/streamlit-example.gi 1.4s
=> [5/5] RUN pip3 install -r requirements.txt 40.2s
=> exporting to image 10.5s
=> => exporting layers 10.4s
=> => writing image sha256:a6d87a0a5a186afccf4479bdc91240595ad74440a5d8f 0.0s
=> => naming to docker.io/library/sample-app 0.0s
- Dockerイメージが出来ているかを確認します
(base) macpro:app sharland$
docker images
実行結果 REPOSITORY や IMAGE ID が表示されます
REPOSITORY TAG IMAGE ID CREATED SIZE
sample-app latest a6d87a0a5a18 About an hour ago 971MB
Dockerコンテナを起動します
- コンテナとホストのポート
8051
でDockerイメージsample-app
を実行します
docker run -p 8501:8501 sample-app
実行結果`You can now view your Streamlit app in your browser. `と表示されれば正常に動作しています
Collecting usage statistics. To deactivate, set browser.gatherUsageStats to False.
You can now view your Streamlit app in your browser.
URL: http://0.0.0.0:8501
-
ctrl
+C
でコンテナの動作を停止することができます - ターミナルウィンドウを閉じてもコンテナはそのまま動作し続けます
公式サンプルStreamlitアプリの動作を確認します
- Webブラウザで以下のURLを表示させます
- 以下のようにアプリが表示されます
Docker Desktopアプリを使ってコンテナを起動してみます
- Docker Desktopアプリを起動します
- コンテナレポジトリ名
sample-app
行の右端のRUN▶︎
ボタンをクリックします -
New Container
ダイアログでRUN
ボタンをクリックします