M1 MacのDocker上でのR studio環境構築
訳があってRをやらなくてはならなくなった。
環境構築をするにあたってローカルにインストールすることも考えたが、再現性やソフトの競合を避けるという意味でdockerコンテナ上に環境を構築することにした。
単にrstudioのイメージを使用して環境構築することができなかったが、いくつか工夫をすることで対処することが可能だった。
その方法をメモしておく。
DockerでR studioを環境構築
R studioによる解析を行うための環境構築の方法のうちの一つとして、Dockerを用いて構築する方法がある。
rocker/rstudioイメージが用意されており、ローカル環境を汚すことなく、とても簡単に環境を構築することができる。
しかしながら、今日(2022/09/26)時点ではM1 macbook (ARMチップ) において先のDockerイメージを用いて環境構築ができない。
エラーの発生した状況
実行したコマンドは以下。なお、このコマンドはrocker/rstudioイメージのドキュメントを参考に作成した。
docker run --name rstudio -e PASSWORD=rstudio --rm -it -p 8787:8787 rocker/rstudio:4.1.3
ターミナル上に生成されたエラーメッセージは以下。
2022-09-12T13:50:15.898469Z [rserver] ERROR system error 1 (Operation not permitted); OCCURRED AT rstudio::core::Error rstudio::core::system::posix::{anonymous}::restorePrivilegesImpl(uid_t) src/cpp/shared_core/system/PosixSystem.cpp:66; LOGGED FROM: void rstudio::server::pam_auth::{anonymous}::assumeRootPriv() src/cpp/server/ServerPAMAuth.cpp:57
rserver[1178]: ERROR system error 1 (Operation not permitted); OCCURRED AT rstudio::core::Error rstudio::core::system::posix::{anonymous}::restorePrivilegesImpl(uid_t) src/cpp/shared_core/system/PosixSystem.cpp:66; LOGGED FROM: rstudio::core::Error rstudio::core::system::launchChildProcess(std::__cxx11::string, std::__cxx11::string, rstudio::core::system::ProcessConfig, rstudio::core::system::ProcessConfigFilter, PidType*) src/cpp/core/system/PosixSystem.cpp:2168
これについていくつかissueが報告されているので、自分だけの問題ではないと考えている。
- Operation Not Permitted Error from Rocker RStudio Image on M1 MacBook
- rocker/rstudio for apple silicon linux/arm64/v8 platform
解決した方法
rocker/rstudioイメージの元になっているrocker/r-verイメージをベースにrstudioをインストールすることで対応する。
具体的には、提案されていた解決方法を少し変えてDockerfileを書いて対応した。
親切なことにイメージ内にビルド用のコマンドが内蔵されているのでそれを呼び出してあげれば良い。
具体的なファイル構成や内容については以下。
ファイル構成
.
├── docker
│ ├── Dockerfile
│ ├── _config.sh
│ ├── build.sh
│ └── run.sh
build.shにはdocker image build
コマンド、run.shにはdocker container run
コマンドが書かれており、それらで使用する変数を_config.shにて定義、取得し、読み込ませている。
Dockerfile
# References
# https://github.com/rocker-org/rocker-versioned2/issues/144#issuecomment-1224978820
# Base image
FROM rocker/r-ver:4.1.3
# variables
ARG user_name
# environment variables
ENV S6_VERSION=v2.1.0.2
ENV RSTUDIO_VERSION=daily
ENV DEFAULT_USER=${user_name}
ENV PANDOC_VERSION=default
ENV PATH=/usr/lib/rstudio-server/bin:$PATH
# set up the environment
RUN /rocker_scripts/install_rstudio.sh
RUN /rocker_scripts/install_pandoc.sh
# ports
EXPOSE 8787
# initialize
CMD ["/init"]
# install packages
RUN r -e "install.packages('rmarkdown', repos='http://cran.rstudio.com/')"
_config.sh
#!/bin/bash
# variable
SCRIPT_DIR=$(cd $(dirname $0)/..; pwd)
DIR_NAME=$(basename $SCRIPT_DIR)
IMAGE_NAME="rstudio"
USER_NAME="rstudio"
IMAGE_VERSION=4.1.3
DOCKER_USER_ID=yu9824
build.sh
#!/bin/bash
# config
source $(dirname $0)/_config.sh
# build image
docker image build \
--build-arg user_name=$USER_NAME \
-t $DOCKER_USER_ID/$IMAGE_NAME:$IMAGE_VERSION $SCRIPT_DIR/docker
run.sh
#!/bin/bash
# config
source $(dirname $0)/_config.sh
# run container
docker container run -it --rm \
--mount type=bind,source="$SCRIPT_DIR",dst=/home/"$USER_NAME"/"$DIR_NAME" \
-p 8787:8787 -e PASSWORD=rstudio \
--name $DIR_NAME $DOCKER_USER_ID/$IMAGE_NAME:$IMAGE_VERSION
上記を準備したのち、まずdocker image build
コマンドを実行する。
sh docker/build.sh
続いて、docker container run
コマンドを実行する。
sh docker/run.sh
その後、http://localhost:8787にアクセスし、idとパスワードを入力する。
パスワードはrun.sh
にて指定したものになる。
特に変更していなければ両方rstudioになるが、ご自身で変えることをおすすめする。
ログインが完了するとR studioの画面になる。
ディレクトリをマウントしているので、外からもらったファイルを使って解析をすることも可能。
これらのファイルは以下のリポジトリにまとめた。
https://github.com/yu9824/rstudio
コメント
機会があればVSCodeでも解析できるようにしようと思うが、それをしようとしているサイトが少ないことからR Studioが一番よいRの解析環境なのではないかと思うので、とりあえず慣れてみようと思う。