renv と Docker との相互運用パターンの一例。
- ローカルマシンの Docker Desktop 上で、コンテナを使って RStudio Server を起動する。
- Docker ホスト上(つまり PC 上の普通のフォルダ)に renv パッケージキャッシュを作成し、それを Docker コンテナにマウントして利用する。
- Docker Desktop for Windows/Mac
- Docker 18.06 以上
.env.example
ファイルを.env
にコピーする.env
を編集してRENV_PATHS_CACHE_HOST
の値を正しいパッケージキャッシュのディレクトリパスに修正する(macOS の場合、/Users/ユーザー名/Library/Application Support/renv/cache
が標準的なパス)- もしまだなければ、
RENV_PATHS_CACHE_HOST
の場所にディレクトリを作成する
- 次のコマンドで RStudio Server を開始する:
docker-compose up -d
- ブラウザで http://localhost:8787 を開き RStudio Server に接続する。
- RStudio Server 上でプロジェクト
/home/rstudio/project/project.Rproj
を開く。 - RStudio Server 上でソースの編集やコードの実行を行う。
- 終了するときは次のコマンドで RStudio Server を停止する:
docker-compose down
- イメージ名:
renv-docker-example:latest
- ディレクトリ
_rstudio/
でビルドする。 - ベースイメージ
rocker/rstudio:4.0.2
に日本語フォントのインストールなどの修正を少し加える。 - パッケージはコンテナ起動後に外からマウントするので、イメージのビルド時にはインストールしない。
- R プロジェクト
- この Git リポジトリ全体が1つの R プロジェクトになっている。
- このディレクトリが Docker コンテナ側の
/home/rstudio/project
にマウントされる。
- renv パッケージキャッシュ
- Docker ホスト側(つまりローカルマシン上)の適当なディレクトリを renv パッケージキャッシュとする(macOS の場合、
/Users/ユーザー名/Library/Application Support/renv/cache
が標準的なパス)。 .env
ファイルで環境変数RENV_PATHS_CACHE_HOST
に Docker ホスト側の renv パッケージキャッシュのパスを指定する。- Docker ホスト側のパッケージキャッシュがコンテナ側のパッケージキャッシュ
/home/rstudio/.local/share/renv/cache
にマウントされる。
- Docker ホスト側(つまりローカルマシン上)の適当なディレクトリを renv パッケージキャッシュとする(macOS の場合、
Docker ホスト側/コンテナ側のパッケージキャッシュとプライベートライブラリは次のような関係となる:
- renv でインストールされたパッケージの実体は Docker ホスト側のパッケージキャッシュに保存される。
- Docker ホスト側のパッケージキャッシュは、ボリュームのマウントによって Docker コンテナ内のパッケージキャッシュに共有される。
- Docker コンテナ内で、プライベートライブラリ
renv/library
からパッケージキャッシュへのシンボリックリンクが作成される。