Jupyter Lab環境を作成する

Docker
スポンサーリンク

Jupyter Lab とは Jupyter Notebook の後継ツールで、ブラウザ上で動作させることができる対話実行型環境です。

データー分析には欠かすことができないツールの一つです。

「Google Colabo」でクラウド上で簡単にPythonの実行環境構築ができますが、インターネットが繋がっていない環境ですと使用ができないためローカル環境で使用することができる「Jupyter Lab」を使用したいと思います。

「Google Colabo」同様に「Jupyter Lab」でも入力したプログラムの結果がすぐに表示され確認できるためとても便利で使いやすいです。

「Jupyter Lab」はローカル環境に直接インストールして使用することも可能ですが、今回はローカル環境を汚す(不要なファイルをインストールすること)なく構築したいため「docker」を使って環境構築を作成したいと思います。

Jupyter Lab 環境構築

Dockerのインストール

まずはお使いのPCに「Docker」をインストールしてください。

※今回はインストール手順を省略します。「Dokcer」は現在プログラミングにおいてほぼ必須の技術となっています。まだ使用されたことのない方はとても便利なツールですので是非触ってみてください。

Dockerに使用するディレクトリの作成

ホームディレクトリに「docker」ディレクトリを作成し、その中に「j-lab」ディレクトリを作成します

今回はホームディレクトリに「docker」ディレクトリを作成し、その中に Jupyter Lab 用として「j-lab」ディレクトリを作成します。

Users/ユーザー名/docker/j-lab
Users/
  └ ユーザー名/
      └ docker/j-lab/

※ディレクトリの構成はお好みで変更してください。

Dockerfile、 docker-compose.yml等の作成

「j-lab」ディレクトリの中に「src」←ディレクトリ、「.env」、「dockerfile」、「docker-compose.yml」、「requirements.txt」を作成してください。

ディレクトリの構成は下記のようになります。

j-lab/
 ├── src/
 ├── .env
 ├── dockerfile
 ├── docker-compose.yml
 └── requirements.txt

また「dockerfile」「docker-compose.yml」の中身は下記をコピーして貼り付けて保存をしてください。

・dockerfile (※拡張子は無しなので注意してください)

FROM python:3.10 
USER root

ENV LANG=ja_JP.UTF-8 \
    LAUGUAGE=ja_JP:ja 
    LC_ALL=ja_JP.UTF-8 \
    TZ=JST-9 \
    TERM=xterm

RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y libgl1-mesa-dev && \
    apt-get -y install locales && \
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \
    apt-get -y install ffmpeg && \
    apt-get install -y vim less && \
    rm -rf /var/lib/apt/lists/*

RUN mkdir -p /src
COPY requirements.txt /src
WORKDIR /src

#JupyterLabで拡張機能インストールするために必要
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash && \ 
    apt-get install nodejs

RUN pip install --upgrade pip && \
    pip install --upgrade setuptools && \
    pip install -r requirements.txt

・docker-compose.yml

version: '3'
services:
  j-lab:
    restart: always
    build:
      context: .    #Dockerfileがあるディレクトリ
      dockerfile: ./Dockerfile    #Dockerfile を指定
    image: j-lab-img:${TAG}    #build時にイメージ名を宣言
    container_name: 'j-lab'    #build時にコンテナ名を宣言
    tty: true
    volumes:
      - type: bind
        source: "./src"
        target: "/src"
    command: >    #起動直後にjupyter serverが立ち上げる
      sh -c
      "jupyter-lab
      --allow-root
      --ip=0.0.0.0
      --port=8888
      --no-browser
      -b localhost
      --NotebookApp.token='' "
    ports:
      - "8888:8888"

・requirement.txt

## JupyterLab
jupyterlab
jupyterlab-language-pack-ja-JP
nodejs

## 機械学習
scikit-learn
numpy
scipy
pandas
pandas-datareader
tensorflow
matplotlib

##web解析・操作
BeautifulSoup
selenium

・.env

TAG=1.00

以上で「Jupyter Lab」の環境構築は完成です。

あとは dockerコマンド を実行するだけです。

dockerコマンドの実行

まずはコンテナをビルドします。

下記のコマンドを実行してください。

コンテナのビルド

docker build -t j-lab:1.00 /Users/ユーザ名/docker/j-lab

※さきほど作成した「dockerfile」があるディレクトリを指定しています。ビルドには数分かかると思います。しばらくお待ち下さい。

ビルドが完了しましたら、コンテナを実行します。

下記のコマンドを実行します。

コンテナの実行

docker run -p 8888:8888 -v /Users/ユーザー名/docker/j-lab/src:/src –name j-lab -it イメージID /bin/bash

イメージIDは下記コマンドで調べることがきます。

起動していないコンテナも含め全て表示

docker ps -a

※「CONTAINER ID」「IMAGE」「COMMAND」「CREATED」「STATUS」「PORT」「NAMES」の項目が表示されます。

※「IMAGE」の項目がイメージIDとなります。

あとはブラウザの下記アドレスを入力してください

http://localhost:8888/lab

もしくは

http://127.0.0.1:8888/lab

上図の画面が立ち上がれば問題ありません。

さて、さきほどの説明ではコンテナを実行するとき下記のコマンドを使用しました

docker run -p 8888:8888 -v /Users/[ユーザー名]/docker/j-lab/src:/src –name j-lab -it [イメージID] /bin/bash

コマンドがとても長いですよね。。。

コマンドの詳細な説明は省きますが、ホスト側のポート「8888」とコンテナのポート「8888」を繋げ、ホスト側の「src」ディレクトリにコンテナの「src」をマウントするように指定します。

コンテナはコンテナをダウンする毎(パソコンの電源を落としたり)にコンテナ内のデータは消えてしまうため、ホスト側と同期をして消えないようにしています。

ですが毎回このコマンドを入力するのは手間です。

そこで「docker compose」コマンドの登場です

docker comose コマンドを使用する

「docker compose」コマンドを使用すると便利なことがあります。

「docker compose」コマンドを実行するために、「docker-compose.yml」を作成しました。

こちらのファイルにポートを繋げる設定や、マウントする場所を予め指定おいてこのファイルの実行することによってコマンドの入力の手間を簡単にします。

下記コマンドを実行してください。(こちらのコマンドもターミナルで先に「Users/ユーザー名/docker/j-lab」ディレクトリに移動してから実行してください)

#初回起動時
docker compose up -d

※ docker compose up コマンドは 「build」と「run」を同時に行ってくれます

#2回目以降 (コンテナ作成後)
docker compose start

#コンテナの停止
docker compose stop

#コンテナの停止・削除
#コンテナ削除後、再実行する際は docker compose up -d を実行してください)
docker compose down

さきほどのコマンドと比べるととても短く覚えやすくなったと思います。

「docker-compose.yml」は複数のコンテナを同時に起動するときに使用するファイルですが、今回はその機能を利用しました。

最後に

今回イメージ作成の元をあえて「python」イメージを利用しました。

理由はこのJupyterlabコンテナを作成するのと同時に Python 開発環境も作成したかったためです。

 ※そのため作成イメージを 「Ubuntu」「Alpine」などに変更しても全く問題ありません。お好みで変更してください

JupyterLabを使用しなくても、このコンテナを実行すれば VScode などで Python 開発・実行も行えます。

JupyterLabで作成したpyファイルをすぐさま検証することもできます。

また今回「requirement.txt」は私がよく使うライブラリを書きましたが、使用する際はお好みのライブラリに書き換えてください。

Jupyter Lab環境の構築を考えてられる方の一助になれば幸いです。

わからないことなどあれば質問をコメントでいただければ私の分かる範囲であればお答えしますのでお気軽に質問してください。

※おまけ よく使うコマンド

現在起動中のコンテの確認

docker ps

全てのコンテナの確認

docker ps -a

ポート衝突時ポートが衝突していないか調べる

lsof -I:[調べたいポート番号]

使用中プログラムを止める

kill -9 [process id]

コンテナ内部に入るコマンド

docker exec -it j-lab bash 
※コンテナから出る場合は 「exit」で出れます

コンテナ削除

docker rm コンテナID

イメージの削除

docker rmi イメージID

コメント

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