- 概要
- Docker for macのインストールについて
- rocker/rstudioイメージの検索・ダウンロード
- rocker/rstudioコンテナのセットアップ
- 各種dockerコマンドについて
- その他Dockerイメージのセットアップについて
- まとめ
- 補足・参考資料
- 参考
概要
過去の記事で、「【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 ##現在、以下のように変更になっている。 #Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask` instead. #$ brew install --cask 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コマンドの最後に、イメージ名を指定する # --rm オプション(一時実行)で、実行後にコンテナが残りません。 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
: コンテナへのホストのボリュームまたはディレクトリの割り当て
-v オプション、これが結構大切。ホストのフォルダを、Docker側に参照関係を持たせることができる。
以下のような設定で、参照関係を持たせる。
#ホストのフォルダをDockerに参照させる -v $(pwd)/XXX:/home/XXX
コンテナがうまく作成されていたら、コンテナ一覧に表示されます。
#存在するコンテナ一覧の確認 docker ps -a
以下のコマンドで、ブラウザを立ち上げけ、Rstudio-serverにログインします。
#RStudio serverをひらく open http://localhost:8787 #ログイン画面で、以下のユーザー名とパスワードを入力する。 #ユーザー名: rstudio #パスワード: PassWord
各種dockerコマンドについて
コンテナ操作に関するdockerコマンドについて
次に、よく使用するdockerコマンドについて説明します。
#Dockerイメージの強制削除 docker rmi -f [イメージID / イメージ名] #未使用イメージの一括削除 #<=1.12 docker rmi `docker images -q` #>=1.13 docker image prune #Dockerコンテナの強制削除(指定) docker rm -f [コンテナID / コンテナ名] #(または複数でも可能) docker rm -f [コンテナID 1] [コンテナID 2] [コンテナID 3] #全コンテナの一括削除 docker rm -f `docker ps -a -q` #コンテナの一覧表示 docker ps -a ##コンテナの開始・起動(ID頭文字の数文字でも可) docker start [コンテナID / コンテナ名] #コンテナの起動停止(ID頭文字の数文字でも可) docker stop [コンテナID / コンテナ名] ##コンテナのリソース使用状況 docker stats # command + c で停止 #その他: バックグラウンドで稼働しているコンテナに接続する場合 docker attach [コンテナID / コンテナ名]
dockerコマンド・オプションについて補足
-f
: 強制削除、stopされている場合には不要
dockerの設定情報
Dockerの設定情報の表示には、infoオプションを利用します。
CPUs や Total Memoryなどのリソース情報も表示されます。
docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.1-docker) scan: Docker Scan (Docker Inc., v0.6.0) Server: Containers: 2 Running: 0 Paused: 0 Stopped: 2 Images: 2 Server Version: 20.10.5 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc Default Runtime: runc Init Binary: docker-init containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec init version: de40ad0 Security Options: seccomp Profile: default Kernel Version: 5.10.25-linuxkit Operating System: Docker Desktop OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.776GiB Name: docker-desktop ID: NFEE:WTKU:EONK:NUEH:R25J:35EV:U5OL:IOQV:HSFM:J2I7:WRNR:AGPJ Docker Root Dir: /var/lib/docker Debug Mode: false HTTP Proxy: http.docker.internal:3128 HTTPS Proxy: http.docker.internal:3128 Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
ローカル・コンテナ間のファイルコピー
##コンテナにファイル・コピー 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