Dockerでデータサイエンス環境を作る

ここ最近のこのブログを振り返ると、やたら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

この記事を書いた人

井上 研一

経済産業省推進資格ITコーディネータ/ITエンジニア。株式会社ビビンコ代表取締役。コールセンターへのAI導入プロジェクトに参画したことをきっかけに、AI・IoTに強いITコーディネータとして活動。株式会社ビビンコでは、IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。