DockerでJupyterを起動する

DockerfileとDockerComposeを利用することで
コンテナを起動して、開発環境が作ることができました。

次は、DockerのコンテナでJyputerを起動して
http://localhost:8888
のように、ブラウザからDockerのコンテナ内で起動しているJupyterにアクセスしてみます。

まずはDockerfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
FROM python:3.7-slim
USER root

RUN apt-get update
RUN apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

ADD ./usdnotebook/requirements.txt /work_dir/
ADD ./usdnotebook/jupyter_notebook_config.py /tmp/

RUN mv /tmp/jupyter_notebook_config.py ./~jupyter

WORKDIR /work_dir
RUN pip install -r requirements.txt

EXPOSE 8888

すでにJupyterをインストールしているイメージもありますが
Usdを利用したかったので 3.7-slimをベースにします。

1
2
3
usd-core
jupyter
jupyterlab

requirements.txtはこのとおり。

1
2
3
4
5
6
c = get_config()
c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.notebook_dir = '/work_dir'
c.NotebookApp.password = u''

Jupyterの設定ファイルを用意して、ADDで追加したあと
jupyter 用のフォルダ以下にコピーします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
version: "3"

services:
  usdnotebook:
    build:
      context: .
      dockerfile: ./usdnotebook/Dockerfile
    container_name: usdnotebook
    stdin_open: true
    volumes:
      - ../:/work_dir
    ports:
      - "8888:8888"
    environment:
      - JUPYTER_ENABLE_LAB=yes
    command: jupyter lab --NotebookApp.token='' --allow-root --no-browser --port 8888 --ip=0.0.0.0

最後に docker-compose.yml を書きます。

ports が、コンテナ側のポートと実際にアクセスするポートの対応関係を指定するもの
command は、コンテナ起動後に実行したいコマンドになります。

準備ができたら、

1
docker-compose -f docker/docker-compose.yml up 

で、コンテナを起動します。

コンテナが起動できたら、

ブラウザで指定のポートにアクセスすると、Jupyter Labに接続することができます。
volumes でローカルPCのディレクトリをマウントしていれば
コンテナ内でNotebookを実行していても、データはローカルに残るので色々はかどります。