タイトルの通りですが、Jupyter NotebookをDockerを使って簡単にインストールし使用するための作業ログです。Jupyter Notebook上でScalaも使えるようにします。
dockerはインストール済みとします。
以下のDockerfileを準備します。Pythonのパッケージは使用するかもしれないものをひととおり書いておきます。
FROM centos:7
RUN yum install -y python3 java-11-openjdk
RUN pip3 install jupyter jupyter-contrib-nbextensions jupyter_nbextensions_configurator numpy pandas matplotlib scikit-learn mlxtend boto3
RUN jupyter contrib nbextension install
# Jupyter-Scala インストール
WORKDIR /install
ENV SCALA_VERSION=2.13.1
ENV ALMOND_VERSION=0.8.2
RUN curl -Lo coursier https://git.io/coursier-cli
RUN chmod +x coursier
RUN ./coursier bootstrap -r jitpack -i user -I user:sh.almond:scala-kernel-api_$SCALA_VERSION:$ALMOND_VERSION sh.almond:scala-kernel_$SCALA_VERSION:$ALMOND_VERSION -o almond
RUN ./almond --install
WORKDIR /work
CMD jupyter notebook --ip='*' --no-browser --allow-root --NotebookApp.token=''
Pythonのパッケージのjupyter-contrib-nbextensions、jupyter_nbextensions_configuratorと、そのあとで実行しているjupyter contrib nbextension installはnbextensionsを使うためのものです。
Jupyter-Scalaのインストールに関しては以下の公式ページ参照。
Installation · almond
jupyterのオプションの–allow-rootはroot権限のままJupyterを実行するために必要なオプションです。Dockerの中ではroot権限なので必要です。
–ip=’*’はJupyterにどこからでもアクセスできるようにするための設定です。–NotebookApp.token=”はJupyterにブラウザでアクセスしたときのトークン入力をスキップさせるための設定です。私はPCの中のVirtualBoxで動くLinux上でこれを実行しているので、利便性のためにこれらを設定していますが、これは外部から自由にアクセスできてしまう設定なので普通は推奨されないと思います。
このDockerfileのあるディレクトリで以下のコマンドでイメージを作成します。
$ docker build -t myjupyter .
Jupyterで作業したいディレクトリに移動してから以下のコマンドでJupyterを起動します。
$ docker run -it --rm -p 8888:8888 -v $HOME/.aws:/root/.aws -v $(pwd):/work myjupyter
-v $HOME/.aws:/root/.awsはboto3を使ってAWSのAPIにアクセスしたかったので付けています。
Jupyterを起動したらブラウザで8888番ポートにアクセスします。
普通のDockerだとJupyterで作成したファイルはオーナーがrootになってしまうので、rootless Dockerのほうがよさそうです。