【R】Dockerを使ったR(Rstudio Server)のバージョン管理 -一部未完成-

2024-03-10

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ではローカルボリュームのマウントはできませんでした。