はじめに
dockerは会社のエンジニア向けの勉強会で紹介されていて、存在は知ってはいたが使っていませんでした。先日参加したTokyo.RでRockerというものが紹介されており、よし使ってみようと思うに至りました。
今回は遅ればせながら、Rockerを使ってみて、何かを回して、保存するという一連のチュートリアルをやってみます。
用語のざっくり理解
専門家の方に怒られたらあれですが、私の理解はこんな感じです。
- Dockerfile
- OS、言語、ライブラリ、バージョンなどをレシピの食材っぽい感じでテキスト形式で書かれたもの
- イメージ
- コンテナの元。Dockerfileをもとにdockerで生成できる。あるいはdocker hubとか言うのサイトから入手できる。ここからコンテナ(RStudioとかを回したい環境のこと)を起動できる。
- コンテナ
- RStudioとかを起動させておく実行環境。
- 永続化
- ファイルの内容が消えないように残すこと。立ち上げたコンテナを永続化しないと都度データやインストールしたパッケージが消える。
Rockerはdocker hubで提供されているイメージです。RockerのGitHubにはDockerfileも当然あげられていました。自分であれやこれや設定を追加するにはこれを参考にいじることになるのだと思います。
とにかくやってみる
まずは、dockerをインストールします。
Install Docker Desktop on Mac
docker自体はだいぶ前にインストールしたので、入れ方を忘れていますが、ここを見ればわかるはず。
ターミナルで以下を実行
1 |
docker run -e PASSWORD=perio --rm -p 8787:8787 rocker/tidyverse |
ブラウザなどで以下を表示
1 |
http://localhost:8787/ |
DALEXのサンプルコードを回してみる。DALEXはTokyo.Rでも紹介されている機械学習の解釈可能性に関する手法をあらかた実践できるパッケージです。
moDel Agnostic Language for Exploration and eXplanation
以下の図はDALEXなどを使ってGLMで推定した結果の各特徴量の影響度をプロットしたものです。
ターミナルでコンテナのIDを確認する。
1 |
docker ps |
分析結果やソースコードやデータを保存したいので、コンテナの永続化を行います。
1 |
docker commit f9317be953b5 perio/rocker_hadley |
ここではユーザー名をperio、イメージ名をrocker_hadleyにしています。
永続化したコンテナのイメージがきちんと存在するか確認してみます。
1 2 3 4 |
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE perio/rocker_hadley latest f3403d6a9d85 4 hours ago 2.21GB |
ありますね。
さて、先程のコンテナを止めてみましょう。コンテナIDを指定するだけです。
1 |
docker stop f9317be953b5 |
永続化したコンテナを読み込んでRstudioを起動してみます。
1 |
docker run -e PASSWORD=perio --rm -p 8787:8787 perio/rocker_hadley |
実は、誤って最新の状態で保存せずに再度立ち上げてしまいましたwDALEXのサンプルコードを回すために色々パッケージインストールしたので、それが消えてしまった。残念。
元のimageにはないRDataがあるので、一応、永続化はできているので安心です。うむ、次からはきちんと保存をしよう。
これでどのPCでも同じ条件で分析していけるので、良さそうです。
ただ、一部で入らないパッケージ(sfパッケージとか)があったので、より良いDockerfileを探し求めたいとも思いますね。
sfを含む空間解析系のパッケージを扱うものとして、rocker/rspatialがあります。
記事中に登場するtidyverseイメージをベースにしているので同様に使えます。tidyverseイメージで入れるよりは大分楽になるかと。 https://t.co/YBUnZEjEKV— Uryu Shinya (@u_ribo) January 26, 2020
u_riboさんがsfパッケージが動くdocker imageを教えてくれました。これまで、一つの環境にギュッとパッケージを詰め込んでやってきたんですが、目的に応じてdocker imageを選ぶのが良いのでしょう。
1 |
docker run -e PASSWORD=perio --rm -p 8787:8787 rocker/geospatial |
せっかくなので先日作成した事故物件分析用のコードを回してみましょう。
mapviewもインストールできて、問題なく使えました。u_riboさんありがとう。
参考情報
[1] The Rocker Project Docker Containers for the R Environment
[2] The Rocker Images: choosing a container
[3] rocker/tidyverse
[4] How to save data
[5] DALEXverse and fraud detection