Dockerを利用してRStudio ServerでRStan環境を準備する

この記事は，[Stan Advent Calender 2016](http://qiita.com/advent-calendar/2016/stan)の二日目の記事です。
※当初この記事は[RStudio Advent Calendar 2016](http://qiita.com/advent-calendar/2016/rstudio-ide)の二日目の記事と兼用のつもりでしたが，Qiitaはアドカレの兼用を認めない仕様っぽいので，RStudio分は別に補足記事を立てることにしました。

補足記事→[Dockerを利用してRStudio ServerでRStan環境を準備したあと。](http://qiita.com/kazutan/items/524987557fce0d32a02b)

## 要約

tidyverseなパッケージ群，そしてRStanを回すのに使うようなパッケージ群がインストール済みなRStudio Server(日本向け)を，Dockerでさくっと構築しよう。

## 手順

1. Dockerをインストールして使える状態に
2. Dockerイメージを取得
3. コンテナを作成
4. ブラウザでアクセス

これでOKです。

### Dockerをインストール 

各種プラットフォームによって異なりますので，すみませんが**Webで検索してください**。情報はたくさんありますので，ここで下手に説明するよりもずっといいかと思います。本家Webサイトは[こちら](https://www.docker.com/)です。

以降，すでにDockerがインストールされたことを前提に進めます。

### Dockerイメージを取得

#### 利用するDockerイメージ

今回の記事用に，[`kazutan/stan-d`というDockerHubリポジトリ](https://hub.docker.com/r/kazutan/stan-d/)を作成しました。元のGitHubは[こちら](https://github.com/kazutan/stan-d)です。主な特徴は以下のとおりです:

- `rocker/hadleyverse`([GitHub](https://github.com/rocker-org/hadleyverse), [DockerHub](https://hub.docker.com/r/rocker/hadleyverse/))をベース
- `tokyor/rstudio`([GitHub](https://github.com/tokyor/rstudio), [DockerHub](https://hub.docker.com/r/tokyor/rstudio/))に記述してある`Dockerfile`を参考に日本語化
- RでStanを実行するために必要なパッケージをインストール
    - rstan
    - ggmcmc
    - rstanarm
    - 上記が依存するパッケージ

これを`latest`タグで準備しています(GitHubの[`master`ブランチのDockerfile](https://github.com/kazutan/stan-d/blob/master/Dockerfile)に記述)。

また，共立出版のWonderful Rシリーズの[「StanとRでベイズ統計モデリング」サポートページ](https://github.com/MatsuuraKentaro/RStanBook)のREADME下方にある一連のパッケージを組み込んだものも作成しました。これを`RStanBook`というタグで準備しています(GitHubの[`RStanbook`ブランチのDockerfile](https://github.com/kazutan/stan-d/blob/RStanBook/Dockerfile)に記述)。

お好みに応じてどちらかを使うかを選んでおいてください。別に後から`install.packages("hoge")`でインストールできるのであまり悩まなくても大丈夫です。

#### イメージを取得

`latest`を取得する場合，端末で以下のコマンドを実行してください:

```bash
#Ubuntuなどでは`sudo`が必要になります。
$ docker pull kazutan/stan-d:latest
```

これでローカルにイメージを取得します。最後のコロン以降がDockerHubリポジトリ内のタグ名なので，`RStanBook`の場合は差し替えてください。

### コンテナの作成

コンテナを作成します。端末で以下のコマンドを実行してください:

```bash
#Ubuntuなどでは`sudo`が必要になります。
$ docker run -p 8787:8787 -v (リンクさせたいディレクトリパス):/home/rstudio -d --name (コンテナ名) kazutan/stan-d:latest
```

必要に応じてオプションなどは変更してください。例えば,手元PCのホームディレクトリとコンテナのホームディレクトリをリンクさせ,コンテナ名を"kosaki"にしたいなら,以下のような感じになります:

```bash
#Ubuntuなどでは`sudo`が必要になります。
$ docker run -p 8787:8787 -v ~:/home/rstudio -d --name kosaki kazutan/stan-d:latest
```

これでコンテナが作成され，RStudio Serverも起動しているはずです。

### ブラウザでアクセス

ブラウザを起動し，アドレスバーに`localhost:8787`と入力してください。RStudio Serverへのログイン画面が表示されますので，ユーザー名を`rstudio`，パスワードを`rstudio`と入力してください。これでもうOKです。

![1342342.png](https://qiita-image-store.s3.amazonaws.com/0/35118/73a8d69d-8766-cb5c-5828-44b5ff68dfc9.png)

## 注意事項

### Dockerの基本的な操作について

私はDocker素人なのでそこまで把握していませんが，今回の内容で簡単なメモ書きは[DockerHubのリポジトリ](https://hub.docker.com/r/kazutan/stan-d/)に記載しています。またプラットフォームによって色々違うことが出てくるかもしれません。今回はUbuntu16.04環境で準備，テストしています。Dockerに関して不明な点はすみませんが詳しい人やWeb検索でおねがいします。

### Dockerイメージについて

割とやっつけ(2,3時間)で作ったものなので，後からまた変更する可能性が高いです。その場合はリポジトリのトップなどに書いていきます。あと，これはローカルで実行することを念頭に置いています。またこれらの内容について損害などが発生した場合，私は一切の責任は負いません。ご了承ください。

### 問い合わせについて

何かありましたら，Twitterの`@kazutan`もしくはここのコメント，Dockerfileに関することでしたらGitHubリポジトリのissueにおねがいします。

## 参考資料

- https://www.docker.com/
- https://github.com/rocker-org/hadleyverse
- http://www.slideshare.net/teramonagi/reproducebility-100-docker
- https://github.com/tokyor/rstudio
- https://hub.docker.com/r/tokyor/rstudio/
- https://hub.docker.com/r/kazutan/stan-d/