ここ最近のこのブログを振り返ると、やたらJupyterをインストールしています。いろいろな環境を取っ替え引っ替えしてみて、それぞれにJupyterの環境が必要になったからなのですが、いい加減、疲れます。
MacBook Pro 13インチ 2020年モデルを使い始めたので、この環境でもまたJupyterの環境構築が必要になります。まぁ、手慣れたもので、Homebrewでanyenvとpyenvの環境を作って、Anacondaをインストールすれば出来上がり。
それは良いのですが、Jupyter NotebookからRを使うための環境構築にてこずりました。てこずりましたというか、まだ過去形じゃなくて、現在進行形。Rが使えないのです。以前のMacBook Proでは使えるようにできたような気がするんだけどな。勘違いかな…。
Dockerを使ってみる
ということで、今回はmacOSのネイティブ環境にJupyter Notebook+Rの環境を構築するのは諦めて、Dockerを使ってみようと思います。今回初めてやってみたのですが、なんとも簡単!なぜ、今まで大変な目をしていたのだろう…。
Docker自体のインストールはすでに終わっているものとして(Macの場合、Homebrewでインストールすれば終わりですが)、下記のコマンド一発で環境が出来上がります!
docker run -d -p 8888:8888 -v /Users/inoccu/dev:/home/jovyan --name jupyter jupyter/datascience-notebook
少し説明しておくと、jupyter/datascience-notebook
というのは、Jupyter公式で提供されているDockerイメージで、Rを含むデータサイエンスの環境が大体入っています。Dockerfileとかを作ることもなく、これだけでOKです。
-v /Users/inoccu/dev:/home/jovyan
の件は、Mac上の/Users/inoccu/dev
をDocker上の/home/jovyan
にマウントすることを示します。このDockerイメージでは、/home/jovyan
がNotebookのデフォルトフォルダなので、そこで自分の開発作業用フォルダが直接見えるようにしています。
あとでプロセス管理をしやすくするため、--name jupyter
のようにコンテナの名前をつけておきましょう。
初回はDockerイメージのダウンロードがあるので時間がかかりますが、それさえ終われば起動は一瞬。後は、http://localhost:8888
にアクセスすると、このような画面が表示されます。
ログインするにはトークンが必要なんですね。都度、トークンを確認して入力するのは面倒なので、初回だけトークンを入力して、後はパスワードを設定しておきましょう。
初回だけ入力するトークンは下記のコマンドでJupyterの起動ログを確認すると、分かります。
docker logs jupyter
Jupyter Notebookにログインして、Newのプルダウンを開くと、Python 3だけでなく、Rも選択できることが分かります。
Python 3のノートブックを作成し、インストール済みのパッケージを表示させてみます。
!pip list
目ぼしいものだけピックアップすると、こんな感じです。大体のことは、これで大丈夫そうです。
beautifulsoup4 4.9.1
conda 4.8.3
matplotlib 3.2.2
numpy 1.19.1
pandas 1.0.5
Pillow 7.2.0
pip 20.1.1
requests 2.24.0
scikit-learn 0.23.1
scipy 1.5.2
seaborn 0.10.1
SQLAlchemy 1.3.18
Dockerプロセスを確認してみると、このようにjupyterが表示されます。
docker ps
Dockerプロセスを終了するには、docker stop
を使用します。
docker stop jupyter
docker ps -a
再びJupyterを使用する場合は、docker start
を使用します。
docker start jupyter
先ほどパスワードを設定したため、2回目の起動からは、パスワードを入力するとログインできます。
もちろん、pip
を使ってパッケージのインストールも可能です。(追加パッケージ込みで横展開する場合はDockerfileを作って独自のイメージを作った方が良いでしょう。)
このように、Rも問題なく動作します。ただ日本語フォントが入っていないので、plot
で作図した際に日本語が文字化けします。この問題は、今後対応したいと思います。
Dockerコンテナの自動起動
jupyter Dockerコンテナを自動起動する場合は、下記のようにします。
docker update --restart=always jupyter