pyhaya’s diary

機械学習系の記事をメインで書きます

Python + Docker でデータ解析環境の管理

今回は実験データ自体の解析の話ではなく、どのような環境で解析を行ったのかという「環境」の管理について書きたいと思います。大学などで研究をしていて論文としてその成果をまとめる場合、関連するデータや解析プログラムは所属する大学もしくは研究室に整理して保存しておくことが一般的です。これはもちろん、論文に示されているデータがどのように解析されているのかあとから確認することができるようにしておくためです。

実験データの解析を例えば Python で行っている場合、解析の再現性を担保するためにはデータファイルのみならず解析を行っている環境(ライブラリのバージョンなど)も重要になってきます。そこで、この記事では Docker を使ってこの環境の管理をしたという話をします。

動作環境

  • Windows10 Home
  • WSL2 (Ubuntu 18.04)

管理したい環境

以下のような環境で実験データの解析を行うことを目指して環境を作ります

Docker image の作成

FROM jupyter/base-notebook:python-3.8.6

COPY ./requirements.txt .

RUN pip install -r requirements.txt

EXPOSE 8888

base image としては jupyter notebook のイメージが Docker Hub にあるのでこれを使います。タグは latest のものを使うと Docker Hub が更新されたときに中身が変わってしまうので python-3.8.6 を指定します。

解析に使うライブラリは requirements.txtバージョンを明記して書いておきます。

docker-compose.yaml の作成

実際にこのコンテナを運用するときには、ホストから Jupyter Notebook を編集するためにポートフォワーディングをしたり、解析データをマウントしたりします。これらはコンテナを起動するときに指定することは出来ますが、いちいち書くのは面倒なので docker-compose を使います。

version: "3"                                                                                                                                                                                               
services:                                                                                                                                                                                                  
  my-jupyter:                                                                                                                                                                                           
    build: .                                                                                                                                                                                               
    image: my-jupyter:1.0.0                                                                                                                                                                             
    ports:                                                                                                                                                                                                 
      - 8888:8888                                                                                                                                                                                          
    volumes:                                                                                                                                                                                               
      - .:/home/jovyan/                                                                                                                                                                                    
    command: jupyter lab 

コンテナの実行

コンテナを動かすためには、

docker-compose up

を実行します。もしも Docker image がビルドされていないときにはビルドから開始します。http://localhost:8888にアクセスしてJupyter Lab が起動すれば成功です。