第527回ではRStudioのインストール方法を紹介しました。実はコンテナ技術を使うと、
コンテナ技術を使う利点
直近だと第521回でLXDの使い方を解説したように、
まず、
- ホストに余計なパッケージをインストールしなくて良い
- コマンドひとつで全部入りの環境を構築できる
- 複数のバージョンもかんたんに共存できる
- Linuxディストリビューションの差異を無視できる
- 複数のマシン間で環境のマイグレーションを行える
その多くは
最初に行なうべきはコンテナプラットフォームのインストールです。Dockerのインストール方法は第458回を参照してください
RockerプロジェクトのDockerコンテナ
Dockerで特定のアプリケーションを使う上で最初に考えるべきことは、
幸いR・
- r-ver:Rがインストールされたイメージでバージョンごとにタグが振られている
(r-ver:latestのDockerfile) - rstudio:r-verの上にRStudioをインストールしたイメージ
(rstudio:latestのDockerfile) - tidyverse:rstudioの上にtidyverseパッケージやdevtoolsパッケージなどをインストールしたイメージ
(tidyverse:latestのDockerfile) - verse:tidyverseの上にTinyTeXなどをインストールしたイメージ
(verse:latestのDockerfile) - geospatial:verseの上に各種Rパッケージをインストールしたイメージ
(geospatial:latestのDockerfile)
『RユーザのためのRStudio
まずはdocker pull
でイメージを取得しましょう。
$ sudo docker pull rocker/verse (中略) Status: Downloaded newer image for rocker/verse:latest $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE rocker/verse latest a7a50ddde3dd 5 hours ago 2.45GB
Dockerはコンテナ起動時のオプションによって個々のイメージの挙動を変更できます。とりあえず起動してみましょう。
$ sudo docker run -d -p 8787:8787 rocker/verse a465f38827b3c311dde567223349a89a2ac6593ddc18e381587b30a02f88c19d $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a465f38827b3 rocker/verse "/init" 8 seconds ago Up 8 seconds 0.0.0.0:8787->8787/tcp priceless_austin
「-d
」-p 8787:8787
」-p ホストのポート番号:コンテナのポート番号
」
実際にウェブブラウザーから
コンテナの停止・削除
docker ps
で表示されるコンテナIDを使えば、
$ sudo docker stop a465f38827b3 $ sudo docker rm a465f38827b3
もしくはdocker run
実行時に--rm
」
ちなみにコンテナを削除すると、install.
を呼び出したとしても、/usr/
に)
実行中のコンテナの状態を保存したいなら、docker commit
でコンテナをイメージに変換します。
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fc4f64b59435 rocker/verse "/init" 5 minutes ago Up 5 minutes 0.0.0.0:8787->8787/tcp musing_meninsky $ sudo docker commit fc4f64b59435 myverse sha256:8b251722f2fd3a46fb995036939d28bf64ae17085af460f395f720907c90488f $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE myverse latest 8b251722f2fd 15 seconds ago 2.49GB rocker/verse latest a7a50ddde3dd 6 hours ago 2.45GB
上記ではコンテナIDに対して
ただし任意のパッケージセットを持ったDockerイメージを作りたいのであれば、
ワークスペースをホストと共有する
RStudioのプロジェクトワークスペースはコンテナの中にあります。つまりこれもコンテナを削除するとともに消えてしまいます。そこで作業ディレクトリはコンテナの外に保存するようにしましょう。
Dockerでホストとコンテナの間やコンテナ同士でデータを共有したい場合、
$ mkdir rstudio $ sudo docker run --rm -d -p 8787:8787 \ -v /home/$(id -un)/rstudio:/home/rstudio/ rocker/verse
「-v /home/$(id -un)/rstudio:/home/
」-v
」
Rockerの起動オプション
Rocker版RStudioでは、
RockerではPASSWORD
変数を渡すことで、
$ docker run -d -p 8787:8787 -e PASSWORD=何かいい感じのパスワード rocker/verse
また同様にUSER
変数を使えば、
rstudioユーザーはsudoersに追加されていません。そのためsystem()
関数からであってもsudo
は実行できません。コンテナ起動時にROOT
変数にsudo
が実行可能になります。
$ docker run -d -p 8787:8787 -e ROOT=TRUE rocker/verse
環境のバージョンアップ方法
Dockerは一度pullしたイメージをそのまま使い続けます。もしより新しいイメージを使いたい場合は、
$ sudo docker commit コンテナID backup_FOO $ sudo docker stop コンテナID $ sudo docker pull rocker/verse $ sudo docker run --rm -d -p 8787:8787 \ -v /home/$(id -un)/rstudio:/home/rstudio/ rocker/verse
「コンテナの停止・