はじめに
前回は、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を置くことで既存のアプリのライブラリを使いつつ使い捨てのコードを作成できるのではと思います。