【簡単】JupyterlabをDockerで起動

Docker、コンテナ

はじめに

細かい設定とかは後にして、とりあえず使ってみたいケースはよくあると思います。
公式ガイドなどを見れば詳しく書いてありますが、必要最低限で起動できる手順が欲しいと思ったのでまとめました。

今回は機械学習、AIの開発環境でよく利用するJupyterlabdockerで素早く立ち上げます。

前提条件

  • docker-ceがインストールされていること
  • docker-composeがインストールされていること

作業ディレクトリの準備

# mkdir docker-jupyterlab
# cd docker-jupyterlab

Dockerファイルの作成

# vi Dockerfile
FROM python:3

RUN apt-get update
RUN pip install --upgrade pip
RUN python -m pip install jupyterlab

python実行環境を利用してjupyterlabをインストールします。

docker-compose.ymlファイルの作成

docker-composeを利用しますので、docker-compose.ymlファイルを作成します。

# vi docker-compose.yml
version: '3'
services:
  jupyterlab:
    build: .
    image: jupyterlab-test-img
    container_name: jupyterlab-test
    working_dir: /work
    volumes:
      - ./work:/work
    ports:
      - "8888:8888"
    command:
      jupyter-lab --ip 0.0.0.0 --allow-root -b localhost
  • image: イメージ名。
  • container_name: コンテナ名。
  • working_dir: commandで実行するコマンドのベースディレクトリ。
  • volumes: ホストOS上の./workをコンテナの/workにマウント。docker runの「-v」に該当。
  • ports: ホストOSのポート番号とコンテナのポート番号。
  • command: コンテナで実行するコマンド

docker-composeでコンテナイメージビルドと起動

カレントディレクトのファイル確認

# ls 
Dockerfile  docker-compose.yml

ビルドと同時にdockerを起動します。

# docker-compose up
  • 「-d」をつけるとデタッチドモードでバックグラウンドで実行される。今回は「-d」をつけずにフォアグラウンドで実行。
Creating network "jupyterlab_default" with the default driver
Building python3
Step 1/4 : FROM python:3
---> 930516bcf910
Step 2/4 : RUN apt-get update
---> Running in 3f89697fd010
Get:1 http://deb.debian.org/debian bullseye InRelease [116 kB]
Get:2 http://deb.debian.org/debian-security bullseye-security InRelease [44.1 kB]
Get:3 http://deb.debian.org/debian bullseye-updates InRelease [39.4 kB]
Get:4 http://deb.debian.org/debian bullseye/main amd64 Packages [8182 kB]
Get:5 http://deb.debian.org/debian-security bullseye-security/main amd64 Packages [166 kB]
Get:6 http://deb.debian.org/debian bullseye-updates/main amd64 Packages [2592 B]
Fetched 8550 kB in 2s (3508 kB/s)
Reading package lists...
~ ~
jupyterlab-test | [I 2022-07-18 10:05:12.964 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
jupyterlab-test | [W 2022-07-18 10:05:12.972 ServerApp] No web browser found: could not locate runnable browser.
jupyterlab-test | [C 2022-07-18 10:05:12.972 ServerApp]
jupyterlab-test |
jupyterlab-test |     To access the server, open this file in a browser:
jupyterlab-test |         file:///root/.local/share/jupyter/runtime/jpserver-1-open.html
jupyterlab-test |     Or copy and paste one of these URLs:
jupyterlab-test |         http://ea779394ea17:8888/lab?token=16611f785f99dcbbcd5dd13b77babb78ac5154d0e7dbba5f
jupyterlab-test |      or http://127.0.0.1:8888/lab?token=16611f785f99dcbbcd5dd13b77babb78ac5154d0e7dbba5f

ビルドのメッセージとjupyterlab起動メッセージがターミナルに出力されます。

jupyterlabに接続

jupyterlabをリモートで接続できるようにオプションをつけていますので、リモートから接続できます。
ホストOSとネットワークにつながっている端末からブラウザでアクセスしましょう。

ホストOSが192.168.198.190なので、http://192.168.198.190:8888を指定してアクセスします。

tokenを聞かれますので、jupyterlab起動時のメッセージに出力されていた「token=」の右側にある文字列「16611f785f99dcbbcd5dd13b77babb78ac5154d0e7dbba5f」を入力して「Log in」をクリックします。

無事、jupyterlabが立ち上がりました。

jupyterlabの操作

今回はjupyterlabの詳しい説明はしませんが、少しだけ触ってみましょう。

動作確認

jupyterlabの画面で[Notebook]-[Python3]をクリックします。
すると以下の画面になります。

pythonの動作確認のため「print(‘Hello World’)」と入力して実行します。
実行は「Shift+Enter」キーを押すか、三角のRUNボタン(▶)をクリックします。

結果が出力されたら成功です。

ファイル名の変更と保存場所の確認

左側ツリーから対象のファイル上で[右クリック]→[Rename]を選択。

ファイル名を任意の名前に編集します。

ここでは「python-test.ipynb」に変更しました。

ところで、このファイルはどこに保存されているのでしょうか?
docker-compose.ymlファイルでホストOSのディレクトリをマウントしていますので、ホストOSのディレクトリに保存されます。

[ホストOS]# ls
Dockerfile  docker-compose.yml  run.sh  work
[ホストOS]# ls work/
python-test.ipynb

workディレクトリ配下にさきほどファイル名を変更したファイルがあることが確認できます。

コンテナの停止と片付け

起動している状況を確認します。

[ホストOS]# docker-compose ps
Name Command State Ports

jupyterlab-test   jupyter-lab --ip 0.0.0.0 - ...   Up      0.0.0.0:8888->8888/tcp,:::8888->8888/tcp

コンテナを停止します。

[ホストOS]# docker-compose stop
Stopping jupyterlab-test ... done

コンテナを削除します。

[ホストOS]# docker-compose down
Removing jupyterlab-test ... done
Removing network jupyterlab_default

コンテナイメージはまだ残っていますのでコンテナイメージも削除します。

[ホストOS]# docker image ls
REPOSITORY               TAG           IMAGE ID       CREATED         SIZE
jupyterlab-test-img      latest        937dd6c372ac   6 hours ago     1.16GB
[ホストOS]# docker image rm jupyterlab-test-img
Untagged: jupyterlab-test-img:latest
Deleted: sha256:937dd6c372acd6eae81e19602c414eb5e09b2d15367ba64affbae20c0448d1dd
Deleted: sha256:f857a099dd034a577ee98588b8f5f3e90fcf9a0537d5be70a6747989bc4d00ea
Deleted: sha256:b0c4e5ddda38bb061134a990bc61fc3c622e4d6fa7fc879974f23ac7f5b47fb1
Deleted: sha256:ce043185ff5255cf044d3a015c2e4f8f7f2641d06f5a0860de7e7cdf6ef7b6d9
Deleted: sha256:a1492501fc3d884fed83bb055c5c5b52f93abaf7723fd3b98e411ff1c099b0f9
Deleted: sha256:e150daa27b26d0850d7da59594de48079e4beaaf8083e238b56cf09dfbc575f5
(py39) [root@docker01 jupyterlab]#

コンテナイメージも消えました。

[ホストOS]# docker image ls
REPOSITORY               TAG           IMAGE ID       CREATED         SIZE

まとめ

とりあえず「Jupyterlabを使ってみたい」と思ったときに、さっと起動できる手順をまとめました。

参考

Jupyterlab公式ガイド

JupyterLab Documentation — JupyterLab 4.2.3 documentation

docker-compose公式ガイド

Docker Compose — Docker-docs-ja 24.0 ドキュメント

コメント

タイトルとURLをコピーしました