Skip to content

toona note

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 の作法はまだ理解していません。

参考

Docker で Python 実行環境を作ってみる