💻

オレオレJupyterlab環境をDockerで作った

2021/02/16に公開

はじめに

会社でデータ分析とかPoCやるときには社内のJupyterlab環境が整っているのですが、プライベートでコンペに出たり、ちょっとしたデータ分析環境を触りたい場面で、もっとオレオレな環境が欲しいなと思い作ってみました。

kaggleだったりjupyterからもすぐに使えるDockerイメージは提供されていますが、なるべく自分にフィットした使いやすいテンプレートがあると嬉しいなというモチベーションです。

よかったら使ってみてください。

できあがったもの

https://github.com/fuchami/jupyterlab-template

こちらのリポジトリから、Use this templateして適当な名前のリポジトリを作ってください。

あとはgit cloneしてローカルに落としてきたら

$ docker-compose up

を叩いて、localhost:8080 にアクセスするだけでJupyterlab環境が使えます。

中身とか

以下、使う分には必要のない記事なので興味があれば。

Dockerfile

   
FROM python:3.8

RUN apt-get update -y \
    && apt-get upgrade -y

RUN curl -sL https://deb.nodesource.com/setup_12.x |bash - \
    && apt-get install -y --no-install-recommends \
    wget \
    git \
    vim \
    curl \
    make \
    cmake \
    nodejs \
    && apt-get autoremove -y \
    && apt-get clean \
    && rm -rf \
        /var/lib/apt/lists/* \
        /var/cache/apt/* \
        /usr/local/src/* \
        /tmp/*

# install python library
COPY requirements.txt .
RUN pip3 install --upgrade pip && \
    pip3 install --no-cache-dir -r requirements.txt \
    && rm -rf ~/.cache/pip

# install jupyterlab & extentions
RUN pip3 install --upgrade --no-cache-dir \
    'jupyterlab~=3.0' \
    'jupyterlab-kite>=2.0.2' \
    jupyterlab_code_formatter \
    yapf \
    && rm -rf ~/.cache/pip \
    && jupyter labextension install \
      @hokyjack/jupyterlab-monokai-plus \
      @ryantam626/jupyterlab_code_formatter \
      @jupyterlab/toc \
      jupyterlab-vimrc \
      @axlair/jupyterlab_vim \
    && jupyter serverextension enable --py jupyterlab_code_formatter

# install jupyter-kite
RUN cd && \
    wget https://linux.kite.com/dls/linux/current && \
    chmod 777 current && \
    sed -i 's/"--no-launch"//g' current > /dev/null && \
    ./current --install ./kite-installer

WORKDIR /home/work/

そんなに難しいことしてないです出来ないです。Dockefile書くことに慣れていないので恐らくもっといい感じにかけるはず・・・(イメージファイルが3GBくらいあるのでどうにかしたい)

jupyterlab関係のライブラリはあまり書き換えない想定なので、Dockerfileの中で直接インストールしています。
機械学習関連のライブラリについては、どんなデータを扱うかによって必要なものがその都度変わってくると思うのでrequirements.txtにまとめる形で切り分けました。

jupyterlabの拡張機能

これがないとキツいっていう機能に絞って導入しています。

  • jupyterlab-kite
    jupyterlabではコード補完系の拡張を入れないといい感じに自動補完してくれません。
    kiteの他にjupyter-lspもありますが使ってみてあまりしっくりこなかったのでこちらを入れています。
  • @axlair/jupyterlab_vim / jupyterlab-vimrc
    vim系のプラグイン。これ入れるとセル内でもvimのキーバインドが使用出来ます。VScodeのJupyter機能もリッチだったりしますが、vimキーバインドが使えるのは現状Jupyterlabだけだと思います。
  • jupyterlab_code_formatter
    コード整形してくれるやつ拡張機能。
  • jupyterlab-toc
    ノートブック内のMarkdownの見出しを一覧で表示してくれる機能。
docker-compose.yml
version: '3'
services:
  jupyterlab:
    build: 
      context: .
      dockerfile: Dockerfile
    volumes:
      - ".:/home/work"
      - ".jupyter:/root/.jupyter"
    ports:
      - "8080:8080"
    tty: true
    command: jupyter lab --ip=0.0.0.0 --port=8080 --allow-root --no-browser

docker-compose.ymlも同様です。
jupyterの起動にいちいち長ったらしいコマンドを打つのが面倒なので作った程度です。
Makefile書いてあげるのも良いと思います。面倒くさかったのでやらなかった

https://hyper-pigeon.hatenablog.com/entry/2021/02/14/133708

オレオレ設定にするには

jupyterlabのPreferenceで設定したものは/.jupyter/lab/user-settings/配下に保存されます。
そのためこれらのファイルをあらかじめ作成しておいて、Dockerコンテナにマウントさせることでオレオレな環境に仕上げることが出来ます。

jupyterlabの基本設定は./jupyter/labl/user-settings/@jupyterlab/配下に、
拡張機能に関する設定は./jupyter/labl/user-settings/配下に各拡張機能ごとにディレクトリが作成されています。

.jupyter/lab/user-settings/jupyterlab-vimrc/vimrc.jupyterlab-settings
{
    "imap": [
        ["jj", "<Esc>"]
    ],
}

まとめ

Dockerを使ってJupyterlabのオレオレテンプレート環境を作成することが出来ました。
みなさんもオレオレな環境作ってみてください。

次は、mlflowで実験が管理できるような構成にしてあげてもっと効率上げて行きたいですね。

あとそろそろコンペにも出たりしたいです

参考

Discussion