LoginSignup
5
8

More than 3 years have passed since last update.

jupyterをdocker-composeで起動2

Last updated at Posted at 2020-07-06

はじめに

前回は、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 という名前でイメージを作成します。

docker-compose.yml
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

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

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8