python + docker + jupyterlab の開発環境
記事概要
Docker を用いて Jupyterlab による Python 実行環境を作ります。
Docker の理解を目的として、設定事項は必要最小限にとどめました。
GitHub
操作
起動
docker-compose.yml ファイルがあるディレクトリがカレントディレクトリである状態で、下記コマンドでコンテナを起動します。
docker-compose build
docker-compose up -d
起動後は http://localhost:7777 から Docker 内で立ち上がっている jupyterlab に接続できます。
コードは code ディレクトリに作成する想定です。
code ディレクトリはマウントしており、コンテナ停止後も内容は残ります。
停止
docker-compose down
でコンテナを停止します。
コンテナ への接続
コンテナ内での作業が必要な場合は
docker-compose exec python_service bash
で、 bash を起動し、コンテナ内の環境で作業ができます。
ファイル説明
ディレクトリ構成
ディレクトリの構成は以下のとおりです。
├── code
│ └── check.ipynb
├── docker-compose.yml
├── Dockerfile
├── draft.md
├── README.md
└── requirements.txt
code ディレクトリをコンテナと共有します。
code/check.ipynb はコンテナの動作確認用のコードです。コンテナの動作自体には関与しません。
docker-compose.yml
version: "3"
services:
python_service:
container_name: python_container
build: .
volumes:
- "./code/:/root/code/"
restart: always
working_dir: /root/code/
ports:
- "7777:8888"
expose:
- "7777"
command: "jupyter-lab --allow-root --ip=0.0.0.0 --port=8888 --no-browser --NotebookApp.token=' --notebook-dir=/root/code/"
services 内の記述を上から順に確認します。
python_service はサービス名です。 docker-engin から操作する際の名称です。
コンテナ名を指定します。
container_name: python_container
docker-compose が参照する Dockerfile の場所を記述します。 参照する Dockerfile は同一階層にあるので、カレントディレクトリを指定します。
build: .
データの永続化のために code ディレクトリをマウントします。
volumes:
- "./code/:/root/code/"
JupyterLab を起動するディレクトリを指定します。
working_dir: /root/code/
localhost の 7777 ポートを コンテナの 8888 ポートへ繋げます。
expose はなくても動きますが、利用時に接続先を明確にする目的で記述しました。
ports:
- "7777:8888"
expose:
- "7777"
JupyterLab を起動します。
--NotebookApp.token='' とすることで、アクセストークンを要求しないように設定します。 (参考)
誰でもアクセスできる環境下ではセキュリティ上の理由から推奨されていません。
command: "jupyter-lab --allow-root --ip=0.0.0.0 --port=8888 --no-browser --NotebookApp.token='' --notebook-dir=/root/code/"
Dockerfile
FROM python:3.9
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN mkdir -p /root/code/
WORKDIR /root/code/
COPY requirements.txt /root/code/
RUN pip install -r requirements.txt
pip と setuptools はとりあえずアップデートしておきます。
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
requirements.txt に記述したライブラリ群をインストールをします。
RUN mkdir -p /root/code/
WORKDIR /root/code/
COPY requirements.txt /root/code/
RUN pip install -r requirements.txt
requirements.txt
numpy
pandas
jupyterlab
起動時にインストールする python ライブラリを記述するファイルです。
動作確認のために numpy, pandas をインストールします。
jupyterlab もインストール対象に含めていますが、起動時に必ず呼ぶので、Dockerfile に書き込んだほうが良いのかもしれません。
docker の作法はまだ理解していません。