はじめに

前回は、jupyterのdockerイメージ(scipy-notebook)をベースにjupyter pluginも入れて、
docker-composeを使ってイメージの作成と起動しました。

今回は、dockerのpythonイメージをベースにjupyterとdjangoをインストールして、jupyterとdjangoのサーバを起動することを確認しました。

ソースは github にあげてあります。

ディレクトリ構成

フォルダはdockerの配下にmainのDockerfileとjupyterのdockerファイルが存在し、
jupyterのdockerファイルはmainに依存して作成されます。
Pipfileとmain_projectはmain元となるプロジェクトになります。

└── docker
    ├── jupyter
        ├── .jupyter
            └── jupyter_notebook_config.py
        ├── Dockerfile
        └── docker-compose.yml
    └── main
        ├── Dockerfile
        └── docker-compose.yml
└── main_project/*
└── Pipfile

ファイル

docker/main/docker-compose.yml

buildするとmain-project という名前でイメージを作成します。

version: '3'  
services:  
  main:
    image: main-project:1.0.0
    build:
      context: ../../
      dockerfile: ./docker/main/Dockerfile
    ports:  
      - "8000:8000"  
    volumes:  
      - ../../main_project:/usr/src/app/main_project

docker/main/Dockerfile

元となるプロジェクトのdockerイメージのコードです。

# jupyter lab      : 2.1.3
FROM python:3.6.8

WORKDIR /usr/src/app

RUN pip install --upgrade pip && pip install pipenv
COPY ./Pipfile /usr/src/app/Pipfile
RUN pipenv install --system --skip-lock

CMD python main_project/manage.py runserver 0.0.0.0:8000

EXPOSE 8000

docker/jupyter/docker-compose.yml

version: '3'  
services:  
  jupyter:  
    image: main-project-jupyter:1.0.0
    build:
      context: .
    ports:  
      - "8888:8888"  
      - "8000:8000"  
    volumes:  
      - ./.jupyter:/root/.jupyter
      - ./notebook:/usr/src/app/notebook
      - ../../main_project:/usr/src/app/main_project

docker/jupyter/Dockerfile

上記で作成したmain-projectに依存してdockerイメージのコードを作成していきます。
djangoとjupyterの両方を起動します。

FROM main-project:1.0.0

WORKDIR /usr/src/app

COPY .jupyter /usr/src/app/.jupyter

# jupyter
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs npm
RUN pip install jupyterlab
RUN jupyter labextension install \
  @lckr/jupyterlab_variableinspector \
  @krassowski/jupyterlab-lsp \
  @axlair/jupyterlab_vim
RUN pip install jupyter-lsp python-language-server[all]
RUN jupyter lab build

# library
RUN pip install pandas lxml html5lib beautifulsoup4 matplotlib

CMD python main_project/manage.py runserver 0.0.0.0:8000 & jupyter lab --allow-root

EXPOSE 8888
EXPOSE 8000

docker/jupyter/jupyter_notebook_config.py

c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.notebook_dir = './notebook'
c.NotebookApp.open_browser = False
c.NotebookApp.token = ''

起動

$ cd python-jupyter-docker/docker/main
$ docker-compose build
$ cd python-jupyter-docker/docker/jupyter
$ docker-compose up -d

アクセス

jupyter
http://127.0.0.1:8888
django
http://127.0.0.1:8000

終わりに

既存のアプリにjupyterをくっつけるみたいな使い方をしました。
dev環境にjupyterを置くことで既存のアプリのライブラリを使いつつ使い捨てのコードを作成できるのではと思います。

bannerAds