概要
JuliaをJupyter Notebookで使える環境を手軽に再現できるようにするため、Dockerで環境構築していきます。
Jupyter公式のDocker imageをベースにして、データの永続化やパッケージの自動追加をできるようにします。
環境
- OS: Ubuntu 18.04
- Docker 18.09.8
手順
1. jupyter/datascience-notebookを取得
docker pull jupyter/datascience-notebook
2. コンテナを起動
docker run \
-p 8888:8888 \
--user root \
--name mynotebook \
jupyter/datascience-notebook
-pでポート番号、--userでユーザーの指定が必要です。コンテナ名の指定--nameは任意です。
3. Jupyter Notebookにアクセス
To access the notebook, open this file in a browser:
file:///home/jovyan/.local/share/jupyter/runtime/nbserver-17-open.html
Or copy and paste one of these URLs:
http://df19b359c643:8888/?token=xxxxx
or http://127.0.0.1:8888/?token=xxxxx
表示されたURLをブラウザで開くとJupyter Notebookが使えます。
ちなみにJuliaだけでなくRとPythonも使用可能です。Jupyter公式のDocker imageについてはこのページが詳しいです。
データの永続化
このままではコンテナでの作業が保存されないので、ローカルのディレクトリをマウントします。
docker run -p 8888:8888 \
-v ~/path/to/directory:/home/jovyan/work \
--user root \
--name mynotebook \
jupyter/datascience-notebook
-vでマウントするディレクトリを指定します。ちなみにデフォルトユーザー名であるjovyanとはjupyterを使う人というような意味のようです。
パッケージの追加を自動化
1. Dockerfileの作成
よく使うパッケージを自動で追加できるようにちょっとしたDockerfileを作成します。
例としてPlotsとDifferentialEquationsを追加してみます。
FROM jupyter/datascience-notebook
MAINTAINER yoshikiri
# Plotsを追加
RUN julia -e 'using Pkg; Pkg.add("Plots"); using Plots'
# DifferentialEquationsを追加
RUN julia -e 'using Pkg; Pkg.add("DifferentialEquations"); using DifferentialEquations'
REPLを起動せずコマンドでjulia文を実行するには-eオプションを使います。
julia -e 'println("hello, julia")'
2. DockerfileからDocker imageを作成
docker build -t notebook .
上記コマンド実行後、新たにDocker imageが作成されたことが確認できます。imageのバージョンを指定しないとlatestになります。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
notebook latest 4233009a8db5 1 minutes ago 5.77GB
3. Docker imageからコンテナを起動
docker run -p 8888:8888 \
-v ~/path/to/directory:/home/jovyan/work \
--user root \
--name mynotebook \
notebook
最後のimage名を変更しただけです。
4. コンテナの停止、再起動
コンテナ停止は次のコマンドです。
docker stop mynotebook
一度コンテナを作成すれば、以降は次のコマンドで表示されるURLにアクセスすればJupyter Notebookを起動できます。
docker start mynotebook
docker exec -it mynotebook jupyter notebook list
まとめ
- jupyter/datascience-notebookでJulia (とR, Python) + Jupyter Notebook環境を構築
- ボリュームをマウントしてデータを永続化
- パッケージを自動で追加するDocker imageをDockerfileから作成
- 作成したDockerfileをGitHubなどで共有すれば、どこでも同じ環境を構築可能
意見や間違いがあればコメントで教えていただけると大変ありがたいです。