Docker公式のDockerレジストリ「Docker Hub」には、さまざまなDockerイメージが格納されている。
今回は、PythonのDockerイメージを利用して、PythonライブラリをインストールしPythonプログラムを実行してみたので、その手順を共有する。
今回利用するDockerイメージ「pyhon」は、以下の場所に格納されている。今回は「24.10」タグを利用する。
https://hub.docker.com/_/python
前提条件
以下の手順に従って、Windows端末上に、Docker Desktopをインストール済であること。
Dockerコンテナ上でのPythonプログラムの実行
Pythonを含むDockerコンテナを起動し、DockerコンテナにログインしPythonプログラムを実行できるようにする。その手順は、以下の通り。
1) 以下のように、特定のフォルダ内に「Dockerfile」、インストールするPythonライブラリ「requirements.txt」、実行するPythonプログラム「decision_tree_sample.py」を配置する。
それぞれのファイルの中身は以下の通りで、decision_tree_sample.pyは、Linuxサーバ上で動かせるよう、文字コードをUTF-8・改行コードをLFとしている。
# 元となるイメージ名を指定 # バージョンを固定するため、タグ(3.12.4)を指定 FROM python:3.12.4 # 作業ディレクトリを作成し固定 RUN mkdir /usr/local/python WORKDIR /usr/local/python # ローカルのファイルを、作業ディレクトリ下にコピー COPY requirements.txt . COPY decision_tree_sample.py . # python環境を構築するためのコマンドを実行 RUN apt-get update RUN apt-get -y install locales && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 RUN apt-get install -y vim less RUN pip install --upgrade pip RUN pip install --upgrade setuptools # pythonのライブラリをインストール RUN python -m pip install jupyterlab RUN python -m pip install -r requirements.txt # 環境変数を設定 ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 ENV TZ JST-9 ENV TERM xterm
scikit-learn==1.5.1 numpy==2.0.0 pandas==2.2.2 matplotlib==3.9.1
import numpy as np from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt import sklearn.tree # 実行時に使用する定数を定義 # MAX_DEPTH=2の場合、FIGSIZE_X=9、FIGSIZE_Y=6を指定 # MAX_DEPTH=3の場合、FIGSIZE_X=12、FIGSIZE_Y=8を指定 # MAX_DEPTH=4の場合、FIGSIZE_X=15、FIGSIZE_Y=10を指定 MAX_DEPTH = 4 FIGSIZE_X = 15 FIGSIZE_Y = 10 # アヤメのデータセットのデータを取得 iris = load_iris() # 先頭51~55件目のデータ(versicolor)と、先頭101~105件目のデータ(virginica)の # データを結合し、Xに格納 X = np.append(iris.data[50:100], iris.data[100:150], axis=0) # 先頭51~55件目の結果(versicolor)と、先頭101~105件目の結果(virginica)の # データを結合し、yに格納 y = np.append(iris.target[50:100], iris.target[100:150], axis=0) print("*** 先頭51~55件目の結果 ***") print(iris.target[50:55]) print("*** 先頭101~105件目の結果 ***") print(iris.target[100:105]) print() # scikit-learnのDecisionTreeClassifierに適用 dtc = DecisionTreeClassifier(max_depth=MAX_DEPTH, random_state=0) dtc.fit(X, y) # DecisionTreeClassifierによる算出結果 print("*** petal length(cm), petal width(cm)のみ抽出したデータからの判定 ***") print("*** 先頭51~55件目のデータから判定した結果 ***") print(dtc.predict(iris.data[50:55])) print("*** 先頭101~105件目のデータから判定した結果 ***") print(dtc.predict(iris.data[100:105])) # 決定木を可視化 # 画像の表示サイズを変更 plt.figure(figsize=(FIGSIZE_X, FIGSIZE_Y)) # 第1引数:モデル名、第2引数:クラス名、第3引数:色付きで表示するか sklearn.tree.plot_tree(dtc, class_names=['versicolor', 'virginica'], filled=True) # 可視化したグラフを画像「decision_tree_graph.png」に保存 plt.savefig("decision_tree_graph.png")
なお、Dockerfileの記載は、以下のページを参考にしている。
https://toukei-lab.com/docker_python
2) コマンドプロンプトを起動し、「Dockerfile」が入っているフォルダに移動後、「docker build -t (Dockerイメージ名) (Dockerfileのパス)」コマンドを実行し、Dockerfileに従ったDockerイメージを作成する。
なお、1回目に「docker build -t (Dockerイメージ名) (Dockerfileのパス)」コマンドを実行した場合の表示は、以下の通りで、少し時間がかかっていた。
3)「docker image ls」コマンドで、2)で作成されたDockerイメージを確認する。
Docker Desktop上でも、以下のように、2)で作成されたDockerイメージが確認できる。
4)「docker container run -it -d (Dockerイメージ名)」を実行し、Dockerコンテナを作成・起動する。
なお、オプション「-it」で、コンテナがすぐに終了しないようにし、オプション「-d」で、コンテナをバックグラウンドで起動するようにしている。
5)「docker container ls」コマンドで、4)で起動したDockerコンテナが作成され、起動していることが確認できる。
Docker Desktop上でも、以下のように、4)で起動したDockerコンテナが作成され、起動していることが確認できる。
6)「docker exec -it (コンテナID) /bin/bash」を実行すると、以下のように、4)で起動したDockerコンテナにログインすることができる。
7) 4)で起動したDockerコンテナ内で、Pythonプログラム「decision_tree_sample.py」を実行すると、プログラムが正常終了し、画像ファイル「decision_tree_graph.png」が出力されることが確認できる。
8) exitコマンドを実行すると、以下のように、4)で起動したDockerコンテナからログアウトできる。
9)「docker cp (コンテナID):(取得したいファイルパス) (コピー先ディレクトリ)」コマンドを実行すると、以下のように、4)で起動したDockerコンテナ上のファイルを、ローカルに取得できる。
10)「docker container stop (コンテナID)」コマンドを実行すると、以下のように、4)で起動したDockerコンテナが停止することが確認できる。
Docker Desktop上でも、以下のように、4)で起動したDockerコンテナの停止が確認できる。
11)「docker container start (コンテナID)」コマンドを実行すると、以下のように、Dockerコンテナが起動することが確認できる。
なお、既に存在するDockerコンテナを起動するには、docker container runコマンドでなく、docker container startコマンドを実行する。
Docker Desktop上でも、以下のように、Dockerコンテナの起動が確認できる。
12)「docker exec -it (コンテナID) /bin/bash」を実行すると、先ほどと同様に、11)で起動したDockerコンテナにログインすることができる。
要点まとめ
- Docker公式のDockerレジストリ「Docker Hub」には、さまざまなDockerイメージが格納されていて、Pythonをインストール済のDockerイメージも利用することができる。