【Docker】Python実行環境をコンテナ上に作成する方法

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • PythonプログラムをDockerコンテナ上で実行したい!
目次

Docker(ドッカー)とは?

Dockerとは、アプリケーションを素早く作成・実行・管理するためのプラットフォームを指します。

Dockerの概要について詳しく知りたい方はこちらの記事をご覧下さい。

【Docker】Python環境構築に必要なファイル準備

DockerでのPythonプログラム実行に際して、イメージとコンテナを作成します。そのために必要となる以下のファイルを準備しましょう!

作成ファイル一覧

スクロールできます
ファイル名概要
docker-compose.ymlDockerコンテナを定義し管理するための定義ファイル。
dockerfileDockerイメージを作成するためのファイル。
requirements.txtPython環境にインストールしたいライブラリを指定するためのファイル。
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関連記事一覧

当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。

【Docker】記事タイトル
Dockerとは|仮想化技術との違い・基本的仕組み・できること
Dockerイメージ・コンテナの仕組みと違い
イメージの取得・一覧表示・削除
コンテナの実行・一覧表示・停止・削除
Dockerfileとは|書き方・コマンド一覧・イメージ作成手順
イメージ作成・DockerHubへの公開手順
マウント方法|ボリューム・バインド・tmpfsマウント
Docker Compose|概要・使い方・YAMLファイルの記述方法
【実践】Docker Composeを用いてWordpress構築

最後に

この記事が気に入ったら
フォローしてね!

目次