こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- PythonプログラムをDockerコンテナ上で実行したい!
Docker(ドッカー)とは?
Dockerとは、アプリケーションを素早く作成・実行・管理するためのプラットフォームを指します。
Dockerの概要について詳しく知りたい方はこちらの記事をご覧下さい。
【初心者向け】Dockerとは|仮想化技術との違い・基本的仕組み・できること
Dockerについて詳しく学習したい方向けに「Dockerとは?」「動作する仕組み」「仮想化技術としての位置付け」「使用メリット」 を解説します。
【Docker】Python環境構築に必要なファイル準備
DockerでのPythonプログラム実行に際して、イメージとコンテナを作成します。そのために必要となる以下のファイルを準備しましょう!
作成ファイル一覧
ファイル名 | 概要 |
---|---|
docker-compose.yml | Dockerコンテナを定義し管理するための定義ファイル。 |
dockerfile | Dockerイメージを作成するためのファイル。 |
requirements.txt | Python環境にインストールしたいライブラリを指定するためのファイル。 |
main.py | 今回実際にテスト実行させるためのPythonファイル。 |
ディレクトリ構成
上記のファイルを次に示すフォルダ構成で配置します。docker-compose.yml
ファイルおよびpyenv
フォルダを同じ階層に作成し、pyenv
の中に残りのファイルを格納します。
- docker-compose.yml
|
- pyenv
- dockerfile
|
- requirements.txt
|
- main.py
以下、ファイルを1つずつ作成していきます。
docker-compose.yml
docker-compose.yml
にdockerコンテナ情報を定義します。以下内容を記載しましょう。
version: "3"
services:
python:
image: python
build:
context: ./pyenv
container_name: python-env
tty: true
volumes:
- .:/workspace:cached
working_dir: /workspace
ports:
- 8888:8888
後続でこのファイルを実行すると、./pyenv
にあるdockerfile
の情報を拾い、python
というイメージが作成され、python-env
というコンテナが作成されます。
dockerfile
Dockerイメージ構築に必要なdockerfile
を作成しましょう。
# ベースイメージを指定
FROM python:3.10
# 標準モジュールのインストール
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
git \
fish
# pip アップグレード
RUN pip install --upgrade pip
# Pythonライブラリのインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# FISH実装
SHELL [ "/usr/bin/fish", "-c" ]
RUN curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
RUN fisher install oh-my-fish/theme-coffeeandcode
requirements.txt
requirements.txt
にPython環境にインストールしたいライブラリを記述しましょう。今回は例として、以下ライブラリを記載してみます。
matplotlib>=3.4.3
seaborn>=0.11.2
main.py
最後に、dockerコンテナ上で実行するpythonファイルを作成します。
今回はmatplotlibを用いてグラフを描画するコードを例として用います。
import matplotlib.pyplot as plt
# データ
x = [1,2,3,4]
y = [10,15,20,25]
# グラフ可視化
plt.plot(x, y)
plt.show()
# グラフ画像保存
plt.savefig('graph.png')
# メッセージ
print("Complete!")
Dockerコンテナ上でPythonプログラムを実行
前述のファイルを作成し指定のディレクトリに格納できたら、実際にコンテナを起動し、Pythonプログラムを実行してみましょう。
コンテナや周辺環境を作成
コンテナや周辺環境を一括作成・実行します。
コマンド操作
docker-compose.yml
と同じディレクトリに移動し、以下コマンドを実行しましょう。
docker-compose up -d
出力イメージ
上記実行後、python-env
というコンテナが作成・実行されたことを確認できます。
(base) ❯❯❯ docker-compose up -d
Building python
[+] Building 35.6s (13/13) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 999B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> [internal] load metadata for docker.io/library/python:3.10
=> [auth] library/python:pull token for registry-1.docker.io
=> [internal] load build context
=> => transferring context: 458B
=> [1/7] FROM docker.io/library/python:3.10@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
=> CACHED [2/7] RUN apt-get update && apt-get install -y --no-install-recommends build-essential
=> CACHED [3/7] RUN pip install --upgrade pip
=> [4/7] COPY requirements.txt .
=> [5/7] RUN pip install --no-cache-dir -r requirements.txt
=> [6/7] RUN curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
=> [7/7] RUN fisher install oh-my-fish/theme-coffeeandcode
=> exporting to image
=> => exporting layers
=> => writing image sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
=> => naming to docker.io/library/python
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
Creating python-env ... done
Fish Shellの起動
今回dockerコンテナに用意したfish shellを用いて、pythonファイルを実行することとします。
コマンド操作
docker exec
コマンドをもとに、実行中のコンテナ内で、新しいコマンドを実行します。
docker exec -it python-env fish
出力イメージ
上記を実行すると、dockerコンテナ上でfish shellが使えるようになります。
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
root@xxxx /workspace
$
Pythonファイルを実行
最後に、Pythonファイルを実行してプログラムが動作することを確認しましょう。
コマンド操作
pyenvに格納したmain.py
を実行する場合、次のように記述します。
python pyenv/main.py
出力イメージ
上記コマンド実行後、main.pyに記載したgraph.png
という画像ファイルが正常に出力されていれば動作確認も完了です!
このようにしてDockerコンテナ上でpythonプログラムを実行することができます。
【参考】本記事で解説したファイル一覧
本記事で解説したファイルはこちらからダウンロードも可能です。
【参考】Docker関連記事・おすすめ学習法
【厳選】Dockerの学習におすすめの教材
Dockerについて詳しく学習したいという方向けにおすすめの教材をご紹介します。厳選した教材をこちらにまとめていますため併せてご覧下さい。
Docker・Kubernetesの学習におすすめ入門本・動画教材7選|マイクロサービス基盤「コンテナ」の理解促進
次世代のアプリケーションアーキテクチャとして注目度の高いマイクロサービスの基盤であるコンテナ技術Dockerおよびコンテナオーケストレーション技術のKubernetesについて詳しく学びたい方向けに、厳選したおすすめ教材を紹介します。
Docker関連記事一覧
当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら