LoginSignup
15
19

More than 1 year has passed since last update.

DockerでJupyterLab環境を作る

Last updated at Posted at 2021-07-22

DockerでPython実行環境を作ってみるを参考にDockerを色々といじってみたので記事にしました。

この記事のゴールは拡張機能付きでJupyterLab環境を作るところまでです。

ファイルの内容

まずはJupyterLabを使用するのに最低限必要な内容をみていきます。
フォルダ構成は下記になります。

フォルダ構成
Dockerfile
requirements.txt(空テキストファイル)
src(空フォルダでOK)

srcはDockerのファイルと同期させてDockerとローカルファイルを
同期させるのに作成しています。

requirements.txtは必要なライブラリを入れておけば、
Docker上でライブラリを使用できるようにしています。

Dockerfile
FROM python:3

# requirements.txtをDockerファイルへコピー
COPY requirements.txt .
RUN python -m pip install --upgrade pip # pipのアップデート
RUN pip3 install -r requirements.txt # requirements.txtのインストール
RUN pip install jupyterlab # JupyterLabをインストール

WORKDIR /src
COPY /src /src

Docker上でrequirement.txtの内容をインストールするために、
コピーする必要があります。

Docker上でrequirmentes.txtを消したい場合はインすロール後に削除コマンドを
入れて記事も見かけました。
削除する場合はインストール後に下記削除コマンドを入れます。

requirements.txtの削除
rm requirements.txt

jupyterlabはpip3でインストールするとエラーになったので、
pipにしています。

Dockerの書き方として&& \でつなげて各方法が推奨されていたので、
それを踏まえると下記の方がよさそうです。

Dockerfile
FROM python:3

COPY requirements.txt .
RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt && \
    pip install jupyterlab

WORKDIR /src
COPY /src /src

JupyterLabを使用するのに必要なコードは以上です。

Docker操作

ここからはDockerの操作になります。
まずイメージを作成していきます。

下記のコマンドでイメージを作成しますが、
イメージ名には大文字は使用不可なので注意してください。

イメージの作成
docker iamge build [-t [イメージ名]:[タグ名] [Dockerfileのあるディレクトリ]]
# 例
docker image build -t jupyterlab_env .

イメージが作成されているか確認

docker image ls

イメージが作成されていたらコンテナを作成・立ち上げますが、
やり方が2つあるので順にみていきます。

JupyterLabの立ち上げ①

一度にコンテナを立ち上げます。

docker run -v $PWD/src:/src -w /src -it --rm -p 7777:8888 jupyterlab_env jupyter-lab --ip 0.0.0.0 --allow-root 

オプションについての説明です。

# ローカルで作成した内容とコンテナ内で作成した内容が同期する設定
-v

# ワーキングディレクトリの設定
-w

# ポートの設定 [ホストのポート番号:コンテナのポート番号]
-p

# インタラクティブな状態に設定
it

# コンテナ終了時にコンテナを削除
--rm

# JupyterLabの立ち上げ
jupyter-lab --ip 0.0.0.0 --allow-root 

ちなみに参考にさせていただいた記事では下記のように-bオプションもついてましたが、外してみても動きました。
少し調べてもなぜついていたのかわからなかったのですが、必要なタイミングで見返せるように記載しておきたいと思います。

docker run -v $PWD/src:/src -w /src -it --rm -p 7777:8888 jupyterlab_env jupyter-lab --ip 0.0.0.0 --allow-root -b localhost

コマンドを打って、URLが表示されたらlocalhost:7777にアクセスします。

7777箇所は指定したホストのポート番号なので違う番号にしても問題ないです。
アクセスするとJupyterLabの認証画面が立ちあがります。

下記図のようにtoken=で表示されるtokenを入力するとJupyterLabが立ち上がります。

2021-07-22_18h06_29.png

終了する場合はターミナル上でCtrl+Cを押すと終了できます。

JupyterLabの立ち上げ②

上記では直接コンテナを立ち上げましたが、今回はコンテナの中に入ってJupyterLabを立ち上げてみたいと思います。
下記でコンテナを作成します。

docker run -v $PWD/src:/src -w /src -dit --rm -p 7777:8888 --name JupyterLab jupyterlab_env 

先ほどと違う点は2つです。

# dを加えてバックグラウンドで動くように設定
-dit

# 次でコンテナに入るときにわかりやすいように名前を設定
--name

動いているか下記コマンドで確認

docker ps

コンテナの中に入るのに上記で指定したコンテナ名を使用します。

docker exec -it JupyterLab bash

表示が下記のように変わっていたらコンテナの中に入れています。

root@852d5b1e5e7c:/src# 

これでコンテナないでbash操作ができるので、
pythonのバージョンの確認やpipでのインストールも可能です。

# pythonのバージョン確認
python --version

# ライブラリのインストール
pip install library

JupyterLabを起動させるために下記を入力します。

jupyter-lab --ip 0.0.0.0 --allow-root

--ip、--allow-rootは外したら動かなかったです。

この後の手順は先ほどと同じです。
コンテナの中からはexitで出ることができます。

最後にコンテナを削除しておきましょう。

docker container stop JupyterLab
docker image rm jupyterlab_env

今回は実行時に--rmオプションをつけているのでコンテナを停止したら削除されますが、
オプションをつけていない場合はrmで削除する必要があるので気を付けてください。

JupyterLabのオプションについて

Docker で JupyterLab を起動し、token 入力なしでアクセスするで書いてくれていました。
トークンの入力なしでも立ち上げが可能なんですね。

composeでDocker環境の構築

docker runを実施した際につけたオプションを
docker-compose.ymlに記載して立ち上げを楽にします。

フォルダ構成は下記のように変更します。

フォルダ構成
Dockerfile
requirements.txt(空テキストファイル)
src(空フォルダでOK)
docker-compose.yml #new

docker-compose.ymlの内容は下記にします。

docker-compose.yml
version: '3'
services:
  jupyterlab:
    restart: always
    build:
      context: .
      dockerfile: Dockerfile
    container_name: jupyterlab
    working_dir: '/src'
    tty: true
    volumes:
      - ./src:/src
    ports: 
      - "8080:8080"
    command: jupyter-lab --ip 0.0.0.0 --port=8080 --allow-root --no-browser

dockerコマンドは下記です。

docker compose up

今回は8080をポート番号に指定しているのでlocal:8080で入ることが可能です。
先ほどはコンテナのポートとホストのポートが違っていたので、
JupyterLabの画面でtokenを入力しました。

しかし、今回はポート番号が同じなのでターミナルで表示されるURL
http://127.0.0.0:8080/lab_token={発行されたtoken}
をクリックするだけでtokenも入力されてJupyterLabがたちあがります。

15
19
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
15
19