RStudio ServerをDockerで使うときのメモ
0. はじめに
RとRStudioもDocker containerとして使えれば少しめんどくさかったインストール工程 (Ubuntu20.04にRとRStudioをインストールする) をやらなくても良いのではないだろうか,と考えた.
調べたところ,RockerというものでRStudio ServerをDockerで使えるらしい1.
今回は備忘録として,Rockerを使ったときのメモを残すことにした.
1. 準備
最低限必要なことは,Docker Engineのインストールである.UbuntuへのDocker Engineのインストールは以前記事にした2.WindowsやMacについては他にも様々な記事があると思う.
2. 使い方
今回は,rocker/tidyverse を使う.おそらくrocker/verse なども同様の方法でできると思う.
まず,イメージファイルをローカルなマシンに落とす.これは,docker pull コマンドを用いればよい.
docker pull rocker/tidyverse
イメージファイルがあるかどうかは,次のコマンドで調べられる.
docker image ls | grep tidyverse
例えば,私のマシンで実行すると以下のように出力された.確かに rocker/tidyverse のイメージファイルがあることがわかる.
tcbn@tcbn-V530-15ICR:~$ docker image ls | grep tidyverse
rocker/tidyverse                                latest                  63d48e0c8338   9 days ago      2.41GB
イメージファイルがある状態で,以下のように docker run コマンドを実行すればバックグラウンドでRStudio Serverが立ち上がる.
docker run --rm -d -p 8787:8787 -e PASSWORD=[yourpasswordhere] -v [mountdir]:/home/rstudio rocker/tidyverse
ここで,それぞれのオプションは以下のようなものである.
- --rm: コンテナの終了後にコンテナを削除する.
- -d: 端末から切り離してバックグラウンドで実行する.
- -p: ポートマッピングを設定する.- -p [port number (host)]:[port number (container)]
- -e: 環境変数を設定する.
- -v: ボリュームをマウントする.- -v [host directory]:[container directory]
このコマンドの実行後,http://localhost:8787/ にアクセスすればユーザ名とパスワードの入力画面が出てくる.そこで,ユーザ名に rstudio を入力し,パスワードに -e で指定したパスワードを入力する.
実際に私のマシンでやってみる.~/r_sample というディレクトリをマウントする.
tcbn@tcbn-V530-15ICR:~/r_sample$ ls
requirements.r  test.r
tcbn@tcbn-V530-15ICR:~/r_sample$ docker run --rm -d -p 8787:8787 -e PASSWORD=mypassword -v $(pwd):/home/rstudio rocker/tidyverse
83136d6a3c656386e74d14899e0ad55d4b10603ade1bad0dfe7dbde88e07e75c
この状態で,http://localhost:8787/ にアクセスすると,以下のようにユーザ名とパスワードの入力画面が出てくる.

ユーザ名に rstudio,パスワードに指定したパスワードを入力し,サインインすると,次のような画面になる.

先程見た~/rsample がマウントされていることがわかる.あとは必要なパッケージをインストールするなどしたら使えるようになる.
コンテナ内のRStudio Server側でrのソースコードを書き換えるとそれがマウントしたローカルなディレクトリにも反映される.
今起動しているDocker containerを docker ps コマンドで見ると,
tcbn@tcbn-V530-15ICR:~/r_sample$ docker ps
CONTAINER ID   IMAGE              COMMAND   CREATED         STATUS         PORTS                                       NAMES
83136d6a3c65   rocker/tidyverse   "/init"   7 minutes ago   Up 7 minutes   0.0.0.0:8787->8787/tcp, :::8787->8787/tcp   inspiring_nash
となっている.コンテナを docker stop コマンドで終了した後に docker ps -a コマンドでコンテナ一覧を見る.
tcbn@tcbn-V530-15ICR:~/r_sample$ docker stop inspiring_nash 
inspiring_nash
tcbn@tcbn-V530-15ICR:~/r_sample$ docker ps -a | grep tidyverse
--rm オプションで指定したとおり,終了後のコンテナが削除されている.
3. まとめ
今回は,RStudio ServerをDockerで使うときのやり方を簡単にまとめた.例えば,rocker/tidyverse をイメージファイルに指定してDockerfileを作り,使いやすい環境を作るといったこともできる.