過去の記事で、「【macOS X編】 Homebrewで、RStudio Serverをインストールしてみた件 + nginx設定」を紹介した。
現状、MacローカルでのRstudio Server動作について、 バージョン・アップ等の問題で*1、少々動作が不安定な場合がある。 そのため、ローカル環境で構築せずに、Docker/Rocker を使用することを推奨する。
Dockerとは、ホストマシンのカーネルを利用して、コンテナ型の仮想環境を作成、配布、実行するための実行環境である。
概要として、環境構築済みのDockerイメージ(= コンテナを起動させるためのベース部分)は、 Docker Hubなどで、いろいろと公開されていて、それらイメージをダウンロードしてきて、 Dockerコンテナ(= Dockerイメージから作成される仮想環境の実行部分)を起動する。 Dockerコンテナは、ユーザーごとに作成したり、ログイン設定を変えて、複数のコンテナを作成・構築できる。
RStudioのDockerイメージは、Rockerが主流で、 このリポジトリには、RStudio関連の複数のDockerイメージ・Dockerfileが含まれている。
今回の内容
Docker for macのインストールについて
MacでのDockerは、GUIアプリ版の「Docker for mac」を使用することをお勧めする*2。
Mac ターミナルを起動して、brew cask
で、Docker.appをインストールする。
Homebrew
のセットアップについては、以前の記事を参照のこと。
以下の2行のコマンドを実行すれば、Dockerのインストール・起動は完了する。
#Docker for macのインストール $ brew cask install docker #Docker.appの起動 $ open /Applications/Docker.app
もしDockerの公式サイトからダウンロードしたい場合には、 DockerのHPに行って、Download for Macからアプリを得る。
Docker.appを起動して、しばらく経つと、 メニューバーの右側に、Docker.appのアイコンが表示される。 アイコンをクリックして、次に「Sign in / Create Docker ID」を選択する。
ここで、Docker IDとPasswordを入力して、ログインする。
もしDockerのアカウントがないなら、 公式HPでアカウントを作成してから、ログインする。
dockerコマンドの動作確認
ターミナルで、dockerコマンドの動作確認を行う。
$ docker -v #Docker version 19.03.12, build 48a66213fe #が出れば、OK ##起動の確認 $ docker ps -a #まだ何も表示されないはず #CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #もしDockerが立ち上がってないと #Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? #とエラーが出る
rocker/rstudioイメージの検索・ダウンロード
まずは、Docker Hub*3にあるRstudio-serverのDockerイメージを探してみる。
docker search コマンドで検索してみる。
#rockerリポジトリのイメージを検索する $ docker search rocker #NAME DESCRIPTION STARS OFFICIAL AUTOMATED #rocker/rstudio RStudio Server image 321 [OK] #rocker/shiny 146 [OK] #rocker/tidyverse Version-stable build of R, rstudio, and R pa… 106 [OK] #rocker/r-base Basic R for Rocker And Official 'r-base' 74 [OK] #rocker/verse Adds tex & related publishing packages to ve… 51 [OK] #rocker/r-ver Reproducible builds to fixed versions of R 38 [OK] #rocker/geospatial Docker-based Geospatial toolkit for R, built… 31 [OK] #rocker/shiny-verse Rocker Shiny image + Tidyverse R packages. U… 28 [OK] #rocker/ropensci 22 [OK] #rocker/r-devel 17 [OK] #rocker/rstudio-stable Build RStudio based on a debian:stable (debi… 16 [OK] #rocker/ml Docker images with R + machine learning libr… 7 [OK] #rocker/r-apt R-related apt-get information 6 [OK] #rocker/binder Adds binder to rocker/tidyverse, providing J… 4 [OK] #rocker/r-rmd Rocker container for Rmarkdown packages 4 #rocker/r-parallel 3 #rocker/drd 3 [OK] #rockerjp/tidyverse rocker/tidyverse for Japanese R users. 2 [OK] #koncina/rocker-bs2 customised rocker image to build the biostat… 2 [OK] #rocker/cuda NVIDIA CUDA libraries added to Rocker images 0 #methodsconsultants/rocker-tidyverse-rquantlib rocker/tidyverse + RQuantLib 0 [OK] #rocker/cuda-dev Adds CUDA and cudnn development libraries to… 0 #atavares/rocker-geospatial-ecmwf This image is based on rocker/geospatial. It… 0 [OK] #rhub/rocker-gcc-san Debian Testing, R-devel and AddressSanitizer 0 #atavares/rocker-geospatial-magick This image is based on rocker/geospatial. It… 0 [OK]
次に、docker pull コマンドで、Dockerイメージのなかで、rocker/rstudio のダウンロードを試みる。
$ docker pull rocker/rstudio #Using default tag: latest #latest: Pulling from rocker/rstudio #a4a2a29f9ba4: Pull complete #127c9761dcba: Pull complete #d13bf203e905: Pull complete #4039240d2e0b: Pull complete #4c420e76969e: Pull complete #07647ba1f5c5: Pull complete #196fc1e9a022: Pull complete #8cef2622a036: Pull complete #Digest: sha256:45b1e0a675aad9417ebb3bb63819c6e775efa77484fbabd0a228e797e7d6cc25 #Status: Downloaded newer image for rocker/rstudio:latest #docker.io/rocker/rstudio:latest #ダウンロード済みのDockerイメージ一覧 $ docker images #REPOSITORY TAG IMAGE ID CREATED SIZE #rocker/rstudio latest f4d862a97fdf 6 weeks ago 1.88GB
rocker/rstudioコンテナのセットアップ
Dockerイメージだけではまだ実行できず、イメージをもとに仮想環境の実行部分(Dockerコンテナ)を作成する。
Dockerコンテナの構築には、 docker run (作成 + 起動) あるいは docker create (作成のみ) コマンドを使う。
rocker/rstudioページに記載されていた、以下のQuickstartコマンドが試してみる(ただし、個人的にはあまりお勧めできない)。
## Quickstartコマンド # dockerコマンドの最後に、イメージ名を指定する $ docker run --rm -p 8787:8787 -e PASSWORD=yourpasswordhere rocker/rstudio #[s6-init] making user provided files available at /var/run/s6/etc...exited 0. #[s6-init] ensuring user provided files have correct perms...exited 0. #[fix-attrs.d] applying ownership & permissions fixes... #[fix-attrs.d] done. #[cont-init.d] executing container initialization scripts... #[cont-init.d] userconf: executing... #[cont-init.d] userconf: exited 0. #[cont-init.d] done. #[services.d] starting services #[services.d] done. #(command + c で停止)
dockerコマンド・オプションについて補足
docker run
: コンテナを作成して起動する--rm
: コンテナの終了時に、自動的にコンテナをクリーンアップし、ファイルシステムを削除する-p
: ポート転送の指定(ホストのポート番号とコンテナのポート番号のマッピング)-e PASSWORD=
: パスワードの設定(パスワードは、yourpasswordhereとなる)
rocker/rstudioコンテナの起動は、以下のコマンドをお勧めする。
##個人的な推奨コマンド + オプション #バックグラウンド起動 #好きなコンテナ名の割り当て(例えば、RStudio001) #Rootログイン $ docker run -d -p 8787:8787 --name RStudio001 -e ROOT=TRUE -e PASSWORD=PassWord rocker/rstudio #もしコンテナ作成だけで良いなら $ docker create -p 8787:8787 --name RStudio002 -e ROOT=TRUE -e PASSWORD=PassWord rocker/rstudio
dockerコマンド・オプションについて補足
docker run -d
: コンテナを作成してバックグラウンド実行するdocker create
: コンテナを作成して起動はしない-d, --detach
:コンテナを作成後、バックグラウンド実行--name
: コンテナ名の割り当て-e ROOT=TRUE
: Root設定
(その他コマンドオプション)
-v, --volume
: コンテナへのホストのボリュームまたはディレクトリの割り当て
コンテナがうまく作成されていたら、コンテナ一覧に表示される。
#存在するコンテナ一覧の確認 $ docker ps -a
以下のコマンドで、ブラウザを立ち上げけ、Rstudio-serverにログインする。
#RStudio serverをひらく $ open http://localhost:8787 #ログイン画面で、以下のユーザー名とパスワードを入力する。 #ユーザー名: rstudio #パスワード: PassWord
各種dockerコマンドについて
よく使用するdockerコマンドについて説明する。
コンテナ操作に関するdockerコマンドについて
#Dockerイメージの強制削除 $ docker rmi -f [イメージID / イメージ名] #Dockerコンテナの強制削除 $ docker rm -f [コンテナID / コンテナ名] #(または複数でも可能) $ docker rm -f [コンテナID 1] [コンテナID 2] [コンテナID 3] #コンテナの一覧表示 $ docker ps -a ##コンテナの開始・起動(ID頭文字の数文字でも可) $ docker start [コンテナID / コンテナ名] #コンテナの起動停止(ID頭文字の数文字でも可) $ docker stop [コンテナID / コンテナ名] ##コンテナのリソース使用状況 $ docker stats # command + c で停止 #その他: バックグラウンドで稼働しているコンテナに接続する場合 docker attach [コンテナID / コンテナ名]
dockerコマンド・オプションについて補足
-f
: 強制削除、stopされている場合には不要
ローカル・コンテナ間のファイルコピー
##コンテナにファイル・コピー $ docker cp [ローカルパス] [コンテナID]:/home/rstudio ##ローカルにファイル・コピー $ docker cp [コンテナID]:[rockerパス] [ローカルパス] $ docker cp [コンテナID]:/home/rstudio [ローカルパス] #ローカルコピーの操作例 $ cd ~/ $ mkdir test $ docker cp [コンテナID]:/home/rstudio ~/test
Dockerコンテナ内のシェルにログインする
コンテナ内のシェルに入るには、docker exec -it
を使う。
#コンテナ内にbashで入る docker exec -it [コンテナID / コンテナ名] /bin/bash #あるいは docker exec -it [コンテナID / コンテナ名] bash
dockerコマンド・オプションについて補足
-it
:-i -t
と同じ。 /bin/bash あるいは R のようなインタラクティブなプロセスでは、-it
オプションでコンテナのプロセスに対して tty を割り当てる。一方、Rstudio Server使用時には、-it
オプションを一般的につけない。-i, --interactive
: コンテナプロセスの標準入力表示-t, --tty
: コンテナプロセスに擬似TTYの割り当て
その他Dockerイメージのセットアップについて
rocker/tidyverseイメージについて
#rocker/tidyverseイメージのダウンロード・コンテナ起動 $ docker pull rocker/tidyverse $ docker run -d -p 8787:8787 -e ROOT=TRUE -e PASSWORD=PassWord rocker/tidyverse
rocker/tensorflowイメージについて
rockerで、tensorflowをセットアップする際のTipsである。
#Docker.appの起動(もし起動していないなら) $ open /Applications/Docker.app #rocker/tensorflowイメージのダウンロード・コンテナ起動 $ docker pull rocker/tensorflow $ docker run -d -p 8787:8787 -e ROOT=TRUE -e PASSWORD=PassWord rocker/tensorflow # R/tensorflowのCPU起動 $ docker run -it rocker/ml R # RStudio/tensorflowのCPU起動 $ docker run -d -p 8787:8787 -e PASSWORD=PassWord -e ROOT=TRUE rocker/ml
もしrocker/tensorflowでのPython/pipのセットアップするなら、
Rstudio server上でConsole横のTerminalタブに移動して、以下の2つのコマンドをする。
$ sudo apt update $ sudo apt install python3 python3-pip
まとめ
5-10分ぐらいで、Rstudio-serverがセットアップできる。いろいろと助かる。
補足・参考資料
HomeBrewでインストールした rstudio-serverのアンイストール
$ brew uninstall rstudio-server #Uninstalling /usr/local/Cellar/rstudio-server/1.2.5001... (1,366 files, 298.2MB) #設定ファイルの表示確認 $ cat /etc/rstudio/rsession.conf $ cat /etc/rstudio/rserver.conf #設定ファイルを消す $ sudo rm -rf /etc/rstudio
nginxの設定はそのままでOKだけど、消しても良い。
$ cat /usr/local/etc/nginx/servers/default.conf #server { # listen 80; # server_name localhost; #location /rstudio/ { # rewrite ^/rstudio/(.*)$ /$1 break; # proxy_pass http://localhost:8787; # proxy_redirect http://localhost:8787/ $scheme://$http_host/rstudio/; # } # } $ rm /usr/local/etc/nginx/servers/default.conf #nginxを消すなら $ brew uninstall nginx rm -rf \ /usr/local/etc/nginx \ /usr/local/etc/nginx/fastcgi.conf \ /usr/local/etc/nginx/fastcgi.conf.default \ /usr/local/etc/nginx/fastcgi_params \ /usr/local/etc/nginx/fastcgi_params.default \ /usr/local/etc/nginx/koi-utf \ /usr/local/etc/nginx/koi-win \ /usr/local/etc/nginx/mime.types \ /usr/local/etc/nginx/mime.types.default \ /usr/local/etc/nginx/nginx.conf \ /usr/local/etc/nginx/nginx.conf.default \ /usr/local/etc/nginx/scgi_params \ /usr/local/etc/nginx/scgi_params.default \ /usr/local/etc/nginx/uwsgi_params \ /usr/local/etc/nginx/uwsgi_params.default \ /usr/local/etc/nginx/win-utf
nginxの設定が残っている場合は、http://localhost/rstudio/で、OK
$ sudo nginx
$ open http://localhost/rstudio/
#でもアクセス可能なるはず
Docker for Macでのメモリ上限の設定
Docker for Macでのメモリ上限とかを変更するには、
メニューバーのDockerアイコンから、Preferences...
に入る。
PreferencesのResourcesパネルをみると CPUs、Memory、Swap、Disk image sizeの設定があるので、 Memory設定を変えることで、メモリ上限を変更できる。
8787ポートの使用有無の確認
ポート使用が重複していると、 うまくRstudio-serverが立ち上がらないので、 補足として述べておく。
#オープンしているポート一覧 $ sudo lsof #8787ポート使用の表示 $ sudo lsof -i:8787