【R】rockerを使わずにUbuntuイメージから旧バージョンのR(Rstudio Server)コンテナを作成

2023年7月でMRAN(Micorosoft R Application Network)の各種サービスが終了したため、rcokerイメージで旧バージョンのR(Rstudio Server)環境を構築するのに四苦八苦したので、Ubuntuイメージからコンテナを作成しました。

Docker Hubのアカウントは作っていないのでここで公開。色々なサイトを参考にしてつぎはぎだらけですが、何とか思ったように動いています。

前提条件

Docker Engineはインストール済み。

DockerやRで、コマンドを使った操作ができる。

手順・方法

Dockerfile

FROM ubuntu:20.04
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir /home/share
RUN chmod 777 /home/share
RUN apt-get update && apt-get upgrade
RUN apt-get install -y r-base gdebi-core libssl-dev libcurl4-openssl-dev libxml2-dev wget init cmake
RUN wget https://download2.rstudio.org/server/focal/amd64/rstudio-server-2023.12.1-402-amd64.deb
RUN gdebi rstudio-server-2023.12.1-402-amd64.deb --n

RUN apt-get install -y locales
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-get install -y \
  fonts-ipaexfont \
  fonts-noto-cjk

# ユーザー追加
RUN useradd -m rstudio && \
echo "rstudio:rstudio" | chpasswd

参考サイト

docker-compose.yml

個人的な都合でRstudio Server 4.3.2が8787ポートで動作しているので、3.6.3は8788に変更しています。

command:は不要?かもしれません。

version: '3'
services:
  rstudio3.6.3:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: rstudio3.6.3
    ports:
      - 8788:8787
    volumes:
      - rstudio:/home/rstudio

    tty: true
    stdin_open: true
    privileged: true
    command: /sbin/init

volumes:
  rstudio:

動作確認

ブラウザからアクセス

ログイン後

なぜか、一部文字化けがありますがセッションリスタートで直ります(原因は探っていません)。

ターミナル

rockerでは使えないターミナルも動作します。

注意点

非rootユーザーでRstudioを使用しているため、インストールしたパッケージはユーザーディレクトリに保存されます。

パッケージのインストールで追加のコマンドやアプリケーションのインストールが必要になる場合もありますが、後からコマンドやアプリケーションをインストールした場合はdocker commitを使ってイメージを保存する必要があります。

Rのバージョンが古いため、パッケージのインストールでURLを指定しないといけない場合もあります。

現在(2024.3月)時点ではまだUbuntu 20.04のリポジトリが使えますが、サポート終了後はイメージ内のリポジトリリストの変更が必要になると思います。