オレオレJupyterlab環境をDockerで作った
はじめに
会社でデータ分析とかPoCやるときには社内のJupyterlab環境が整っているのですが、プライベートでコンペに出たり、ちょっとしたデータ分析環境を触りたい場面で、もっとオレオレな環境が欲しいなと思い作ってみました。
kaggleだったりjupyterからもすぐに使えるDockerイメージは提供されていますが、なるべく自分にフィットした使いやすいテンプレートがあると嬉しいなというモチベーションです。
よかったら使ってみてください。
できあがったもの
こちらのリポジトリから、Use this template
して適当な名前のリポジトリを作ってください。
あとはgit clone
してローカルに落としてきたら
$ docker-compose up
を叩いて、localhost:8080 にアクセスするだけでJupyterlab環境が使えます。
中身とか
以下、使う分には必要のない記事なので興味があれば。
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の見出しを一覧で表示してくれる機能。
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書いてあげるのも良いと思います。面倒くさかったのでやらなかった
オレオレ設定にするには
jupyterlabのPreferenceで設定したものは/.jupyter/lab/user-settings/
配下に保存されます。
そのためこれらのファイルをあらかじめ作成しておいて、Dockerコンテナにマウントさせることでオレオレな環境に仕上げることが出来ます。
jupyterlabの基本設定は./jupyter/labl/user-settings/@jupyterlab/
配下に、
拡張機能に関する設定は./jupyter/labl/user-settings/
配下に各拡張機能ごとにディレクトリが作成されています。
{
"imap": [
["jj", "<Esc>"]
],
}
まとめ
Dockerを使ってJupyterlabのオレオレテンプレート環境を作成することが出来ました。
みなさんもオレオレな環境作ってみてください。
次は、mlflowで実験が管理できるような構成にしてあげてもっと効率上げて行きたいですね。
あとそろそろコンペにも出たりしたいです
Discussion