【R】Dockerを使ったR(Rstudio Server)のバージョン管理 -一部未完成-
Rの分析環境を、バージョンやパッケージを分けて管理する方法です。
色々と試行錯誤しましたが、今回はDockerとRstudio Serverを使ってバージョンの違うRを同時に使う方法です。
関連記事(Docker未使用)
ですが、関連記事と同様に構築した環境の保存は問題ないのですが、バージョンの古い環境を新たに構築するにはもう少し対処が必要です(注意点で記載)。
動作例
LAN内のUbuntu 22.04(Desktop)にDocker Engineをインストールして、バージョンの違うRstduio Serverを動作させています。
R 4.3.2
R 3.5.2
R 4.3.2とポート番号が重ならないように8788に変更して起動。
環境構築
動作環境はサーバー機にインストールやローカルPCへのインストールなど複数の方法がありますが、ここではローカルPC(Windows)で動作させる手順を記載しています。
参考)リバースプロキシ + Dockerでの構築
Dockerのインストール
WindowsにDocker Desktopをインストールします。
ワーキングディレクトリ(R 4.3.2)の作成
ユーザーフォルダ内にワーキングディレクトリを作成して、Dockerfile・docker-compose.ymlを作成します。
ファイル名を間違えてdocker-complse.ymlになっていますが、修正してください。
Dockerfile(R 4.3.2)
FROM rocker/rstudio:4.3.2
LABEL org.opencontainers.image.licenses="GPL-2.0-or-later" \
org.opencontainers.image.source="https://github.com/rocker-org/rocker-versioned2" \
org.opencontainers.image.vendor="Rocker Project" \
org.opencontainers.image.authors="Carl Boettiger <cboettig@ropensci.org>"
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN sed -i '$d' /etc/locale.gen \
&& echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen ja_JP.UTF-8 \
&& /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
RUN /bin/bash -c "source /etc/default/locale"
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# 日本語フォントをインストールする
RUN apt update && apt install -y \
fonts-ipaexfont \
fonts-noto-cjk
docke-compose.yml(R 4.3.2)
version: '3'
services:
rstudio:
build:
context: .
dockerfile: Dockerfile
restart: always
container_name: rstudio4.3.2
environment:
#任意のパスワードを設定する
- PASSWORD=rstudio
ports:
- 8787:8787
volumes:
- ./volume:/home/rstudio
- ./site-library:/usr/local/lib/R/site-library
tty: true
stdin_open: true
ワーキングディレクトリ(R 3.5.2)の作成
R 4.3.2と別のディレクトリ名でワーキングディレクトリを作成して、Dockerfile・docker-compose.ymlを作成します。
Dockerfile(R 3.5.2)
日本語フォントがaptでインストールできなかったので、ひとまずコメントアウトしています。
FROM rocker/rstudio-stable:3.5.2
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN sed -i '$d' /etc/locale.gen \
&& echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \
&& locale-gen ja_JP.UTF-8 \
&& /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
RUN /bin/bash -c "source /etc/default/locale"
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# 日本語フォントをインストールする
#RUN apt update && apt install -y \
# fonts-ipaexfont \
# fonts-noto-cjk
docke-compose.yml(R 3.5.2)
注意点にも記載していますが、ローカルボリュームがマウントできないのでdocker内で永続ボリュームを作成しています。
また、パスワードが「rstudio」のままだとエラーになったので変更しています。
version: '3'
services:
rstudio3.5.2:
build:
context: .
dockerfile: Dockerfile
restart: always
container_name: rstudio3.5.2
environment:
#任意のパスワードを設定する
- PASSWORD=rstudio352
ports:
#ポート番号を変更
- 8788:8787
volumes:
- volume:/home/rstudio
- site-library:/usr/local/lib/R/site-library
tty: true
stdin_open: true
volumes:
volume:
site-library:
動作確認
ブラウザを起動後、「localhost:8787」「localhost:8788」にアクセスして動作例のようになれば無事に起動できています。
注意点
過去バージョンのRをインストールして分析環境を再構築する場合は修正が必要になります。
今後、修正方法を考えて検証が終われば公開します。
rockerを使わずにUbuntuイメージから構築すると大丈夫でした。
過去バージョンのRからのパッケージインストール
パスワードのインストール元の修正が必要そうです。
今回の場合、mranからパッケージをダウンロードしようとしてサイトが閉鎖されていたので、現在も使えるサイトを指定しないといけないようです。
また、CRANとは別の問題ですが、日本語フォントがダウンロードできなかったのでaptのリポジトリも修正が必要になりそうです。
ローカルボリュームのマウント
dockerのユーザーIDとホストのユーザーIDが違うことが原因で、今回の環境では過去バージョンのRstudioではローカルボリュームのマウントはできませんでした。
ディスカッション
コメント一覧
まだ、コメントがありません