Ubuntu Weekly Recipe

第529回 RStudio Serverをよりかんたんにインストールする

この記事を読むのに必要な時間:およそ 3 分

コンテナの停止・削除

docker psで表示されるコンテナIDを使えば,コンテナを停止・削除できます。

$ sudo docker stop a465f38827b3
$ sudo docker rm a465f38827b3

もしくはdocker run実行時に--rmオプションを付けておけば,コンテナの停止時に自動的に削除されます。

ちなみにコンテナを削除すると,コンテナ内部で行われた変更もすべて削除されます。つまりRStudioからinstall.packages()を呼び出したとしても,コンテナの削除によって/usr/local/lib/Rに)インストールしたパッケージは消されてしまうわけです。

実行中のコンテナの状態を保存したいなら,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に対して「myverse」という名前を付けて保存しています。これで次回からrocker/verseの代わりにmyverseイメージを起動すれば,パッケージの状態が保持されます。

ただし任意のパッケージセットを持ったDockerイメージを作りたいのであれば,そのイメージ用のDockerfileを書くことをおすすめします。これによりどのような変更がイメージに加えられているか一目瞭然ですし,将来的にイメージを再構築しやすくなるからです。

ワークスペースをホストと共有する

RStudioのプロジェクトワークスペースはコンテナの中にあります。つまりこれもコンテナを削除するとともに消えてしまいます。そこで作業ディレクトリはコンテナの外に保存するようにしましょう。

Dockerでホストとコンテナの間やコンテナ同士でデータを共有したい場合,Volume機能を利用します。Volume機能には,ホストのディレクトリをbind mountする方法やVolumeコンテナと呼ばれるストレージコンテナを作成しそれを利用する方法などが存在しますが,今回は単にホスト側からRStudioが保存するデータを見られれば良いので,bind mountします。

$ 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/rstudio/が今回追加したオプションです。-vオプションは「ホストのディレクトリ:コンテナのディレクトリ」という書式で,コンテナのディレクトリをホストのディレクトリにbind mountします。これによりコンテナ内部から指定したディレクトリへの変更が,そのままホストにも反映されるのです。

Rockerの起動オプション

Rocker版RStudioでは,一般ユーザーとして「rstudio」アカウントが作成されています。また,そのパスワードは「rstudio」です。しかしながら他のユーザーからアクセス可能な環境において立ち上げるなら,せめてパスワードは変更しておきたいところです。

RockerではPASSWORD変数を渡すことで,rstudioアカウントのパスワードを変更できます。

$ docker run -d -p 8787:8787 -e PASSWORD=何かいい感じのパスワード rocker/verse

また同様にUSER変数を使えば,ユーザー名も変更可能です。

rstudioユーザーはsudoersに追加されていません。そのためsystem()関数からであってもsudoは実行できません。コンテナ起動時にROOT変数に「TRUE」⁠すべて大文字)を設定しておくと,rstudioユーザーがsudoersに追加され,パスワードなしのsudoが実行可能になります。

$ docker run -d -p 8787:8787 -e ROOT=TRUE rocker/verse

環境のバージョンアップ方法

Dockerは一度pullしたイメージをそのまま使い続けます。もしより新しいイメージを使いたい場合は,次のように再度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

「コンテナの停止・削除」でも説明したようにコンテナの停止によってデータが消える場合もあります。commitでコンテナのバックアップを取っておくと良いでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。