RStudio-docker-logo

Hyper-V に Ubuntu 22.04 LTS を入れて RStudio Server を利用していたけど、SSH のところで引っかかって、手元の Laptop PC から繋げなくなったりした。

ネット上のトラブルシューティングは色々試してみたけど、後一歩 work せず、「これを使うにはちょっと知識不足だなー。」と感じて一旦リセット。ネットワークエンジニアリング的な事を調べる事自体は楽しいけど、時間を使いすぎて本業に影響がきそうなので、今回は一旦箸休め。

 

で、それらを調べるうちに、「やっぱり Docker の方が使いやすそうだな-。」と思い、Docker で構築し直す事に。

やってみたら驚くほど簡単にできたので、忘れないうちにメモメモ。

Docker とは

コンテナ型仮想化システムの一つ。

ホストOS(私の場合は Windows)にコンテナ型エンジンと呼ばれる仮想化ソフトウェアをインストールし、その上にイメージを置くことで、複数のアプリケーションを同じOS上で動かす。

アプリケーションやソフトウェアを実行環境と共にコンテナイメージとして包括することから、コンテナ型と呼ばれる。

1つのOSで稼働するので、プロセッサやメモリの消費が少なく、ストレージの使用も僅か。

コンテナイメージやソフトウェアそのものが軽量で、立ち上がりも速い。

virtual-machine-container

Docker で RStudio Server を使えるようにする

RStudio Server は、Linux で動く。

私の使っている OS は Windows なので、Docker Desktop を使用するためには Hyper-V を有効化する必要がある。

今回は下記の方法で環境構築。

  • ローカルサーバのスペック
    • OS: Microsoft Windows 11 Pro
    • System Type: x64-based PC
    • Processor: Intel(R) Core(TM) i7-7800X CPU @ 3.50GHz, 3504 Mhz, 6 Core(s), 12 Logical Processors
    • Total Physical Memory (RAM): 63.7 GB
    • Total Virtual Memory 73.2 GB
  • 仮想マシン:Hyper-V
RStudio Server を構築するまでの手順
  1. Hyper-Vの有効化
  2. Docker Desktop for Windows をインストール
  3. Docker Desktop の設定

Hyper-V の有効化

Hyper-Vを有効化するための条件

Hyper-Vを有効化するためには、下記2点が必要。

  • Windows 11 Proがインストールされていること
  • BIOSにて仮想化が有効化されていること

BIOSで仮想化が有効化する方法は下記。

  1. 起動時にEsc or F1キーを押下して、BIOSを表示。
  2. BIOSのAdvancedタブへ。
  3. Advancedにある CPU configuration を押下。
  4. CPU configuration にある Intel Virtualization Technology を Enabled にする。
  5. Save して再起動。

Hyper-Vの有効化

Win → Settings を選択

Hyper-V-1

Application → Optional features を選択

Hyper-V-2

下の方にある "MoreWindows features" を選択

Hyper-V-3

Windows Features の画面が出てくるので、Hyper-V の項目を表示し、チェックを入れて有効化し、OKを選択

Hyper-V-4

しばらく required files を探した後で……

Hyper-V-5

再起動

Hyper-V-6

Control Panel → System and Security → Windows Tools で Hyper-V Manager と Hyper-V Quick Create が入っている事を確認。

Hyper-V-7

試しに Hyper-V Manager を起動させると、初期画面が出てきた。

Hyper-V-8

まだ何も入っていない。

Hyper-V-8

Docker のインストール

Windows 用の Docker Desktop をインストールする。

Docker Desktop for Windows のインストール

docker docs のサイトで Docker Desktop for Windows をインストール

docker-1

Unpacking files...

docker-3

Configuration が出てくるので、2つともチェックが入った状態で "OK"

docker-2

インストールできたら、Close で終了。

docker-4

インストール後、デスクトップに Docker Desktop のアイコンが作成された。

docker-9

Win で Docker を検索し、Docker Desktop を選択してもOK。

docker-5

実行。あらゆる端末ウインドウからアクセスできる。

docker-6

RStudio イメージの取得

rocker におまかせ

The Rocker Project の方々のお陰で、私レベルの人でも簡単に RStucio Server が使えるようになった(ありがとうごございます!)。

rocker は RStudio Server を含む Debian ベースの Docker イメージ。

作ってくれている Dockerfile は、下記色々。

Docker file 特徴
rocker/r-ver r-base のイメージ。Ubuntu LTSで構築。以下のイメージはすべて r-ver を元に作られている。
rocker/rstudio rocker-ver をベースに作られており、RStudio Server がインストール済み。
rocker/tidyverse rocker/rstudioに加えて、下記Rパッケージがインストール済み。
  • tidyverse
  • devtols
  • rmarkdown
  • R Database Interface
  • data.table
  • fst
  • Apache Arrow R
rocker/verse Tex Live がインストール済み。rocker/tidyverse のパッケージに加えて、いくつかの publishing パッケージもインストール済み。
rocker/geospatial rocker/verse のパッケージに加えて、geospatial Rパッケージ関係がインストール済み。

私の使用内容を考えて、今回は rocker/tidyverse を選択した。

(以下は、rocker/rstudioをインストールした時のキャプチャ。)

Win + R -> cmd でコマンドプロンプト(もしくは Powershell)を起動し、rocker を入れる

Win + R -> 検索欄に "cmd" と入れて、コマンドプロンプトを開く。

cmd

(もしくは Win -> "Powershell" で Powershell を開いてもOK。)

コマンドプロンプトが開く。

cmd-3

で、下記コマンドを実行。

docker run --rm -p 8787:8787 -e PASSWORD=パスワード(自分で設定) --name コンテナ名(自分で設定) rocker/rstudio

Enter を押すと、"Unable to find image 'rocker/rstudio:latest' locally" と出てくるが、ネット上から探してダウンロードしてくれる。

 

Docker の Images の欄を見ると、"rocker/rstudio" が入っていて、

docker-8

Containersの欄を見ると、自分で名付けたコンテナが入っていた(イメージはrocker/rstudio、ポートは8787)。

docker-10

ブラウザからログイン

上記で設定は終了し、後はブラウザからアクセスできる(簡単すぎる!)。

Localhost でログイン

ブラウザを立ち上げ、アドレス欄に localhost:8787 と入れると、ユーザーIDとパスワードを要求する画面が出てくる。

rstudio-server-7
  • Username: rstudio
  • Password: 自分で設定したパスワード

を入れると、RStudio Server が立ち上がる。

docker-11

上記は Google Chrome で立ち上げた時のキャプチャ。デフォルトと色が違うのは、すぐに Tools -> Global Options... -> Appearance でテーマを変えたから。

後は、デスクトップ版の RStudio と同じように、必要なパッケージをインストールし、使用できる。

PC内においてあるファイルのアップロードなども右下の "Files" から可能(もちろん、コンソールからも取り込み可能)。

詳細は "RStudio Cloud" の記事で。

IPアドレスでログイン

別のPCからログインする時は、 http://ローカルPCのIPアドレス:8787 で接続する。

IP アドレスの取得方法

コマンドプロンプト、もしくは Powershell を開き、 ipconfigと入れると、IPアドレスが表示される。

PS C:\Users\XXX> ipconfig
    
    Windows IP Configuration
    
    
    Ethernet adapter イーサネット:
    
       Connection-specific DNS Suffix  . :
       Link-local IPv6 Address . . . . . : feXX::dXXc:ebXX:dXX:aXXa%XX
       IPv4 Address. . . . . . . . . . . : XXX.XXX.XXX.XXX
       Subnet Mask . . . . . . . . . . . : 255.255.255.0
       Default Gateway . . . . . . . . . : XXX.XXX.XXX.XXX
    
    Wireless LAN adapter ローカル エリア接続* 15:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
    
    Wireless LAN adapter ローカル エリア接続* 16:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
    
    Wireless LAN adapter Wi-Fi 4:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
    
    Ethernet adapter vEthernet (Default Switch):
    
       Connection-specific DNS Suffix  . :
       Link-local IPv6 Address . . . . . : feXX::dXXc:ebXX:dXX:aXXa%XX
       IPv4 Address. . . . . . . . . . . : XXX.XXX.XXX.XXX
       Subnet Mask . . . . . . . . . . . : 255.255.240.0
       Default Gateway . . . . . . . . . :
    
    Ethernet adapter vEthernet (WSL):
    
       Connection-specific DNS Suffix  . :
       Link-local IPv6 Address . . . . . : feXX::dXXc:ebXX:dXX:aXXa%X
       IPv4 Address. . . . . . . . . . . : XXX.XXX.XXX.XXX
       Subnet Mask . . . . . . . . . . . : 255.255.240.0
       Default Gateway . . . . . . . . . :
    

上段はデフォルトのIPアドレス。下段は Hyper-V のIPアドレス。

今回は、上段 "Ethernet adapter" の "IPv4 Address: XXX.XXX.XXX.XXX" が求めているアドレス。

IPアドレスは、ローカル PC を再起動するたびに新しく割り振られ、その度に接続先も変える必要がでてくるので、ローカルPCのIPアドレスは固定にしておいた方が良い。

ネットワーク外からインターネットを使ってログイン

RStudio Server の醍醐味はどこからでもアクセスできること。

ただこの場合は、リモートアクセスを有効にしておく必要があり、多少の準備が必要。

ネットワーク外がらアクセスするための準備
  • グローバルIPアドレスの取得
  • ルーターの設定
  • Windowsのファイアウォール設定

グローバルIPアドレスの取得

まずは、使っているインターネット回線のプロバイダがグローバルIPアドレスを配布してくれるかどうか確認する。

私のマンションが契約しているインターネット回線のプロバイダはプライベートIPアドレスのみを配布していたので、追加料金を払って固定グローバルIPアドレスを配布してもらった。

ルーターの設定

ルーターを使っていない場合はこの項目は必要なし。

私はルーターにBuffaloを使用しているので、いくつか設定が必要だった。

固定グローバルIPアドレスの割り当て

固定グローバルIPアドレスをもらったら、Buffaloの設定サイトに入って、IPアドレスを割り当てる。

Webブラウザを開き、アドレスバーに "プライベートIPアドレス/login.html" と入れる。

Global-IP-Address-1

プライベートIPアドレスの確認方法は下記。

Buffaloの設定ログイン画面が出てくるので、

  • ユーザー名:admin
  • パスワード:ルーターの裏に書いてあるパスワード

を入れてログイン。

Global-IP-Address-2

左側のタブから "インターネット" を選択し、下記を入力していく。

  • IPアドレス取得方法:手動設定
    • IPアドレス:取得したグローバルIPアドレス
    • サブネットマスク:取得したグローバルIPアドレスのサブネットマスク
  • 拡張設定
    • デフォルトゲートウェイ:取得したグローバルIPアドレスのデフォルトゲートウェイ
    • DNSサーバーアドレス:プライマリー、セカンダリー共に、取得したグローバルIPアドレスの情報を元に入力

最後に "設定" を押して終了。

Global-IP-Address-3

ポートマッピング

左側のタブから "ポート変換" を選択。

"プロトコル" → TCP/UDP を選択肢、"任意のTCPポート" にしてから "8787" と入れる。(リモート・デスクトップで使用するポート番号)

設定ができたら "新規追加" をクリック。

Port-Change-4

"ポート変換登録情報" のところに新たに8787ポートが追加された。

Port-Change-3

Windowsのポートの開放

Windows11ファイアウォールで、8787の通信を許可するように設定する。

Win -> firewall と入れ、Windows Defender Firewall with Advanced Security を開く。

port-0
port-1

左側の欄で "Inbound Role" を選択し、右側の欄で "New Role" を選択する。

port-2

"Rule Type" -> "Port" を選択して "Next"。

port-3

"Protocol and Ports" -> "TCP" を選択し、開放したいポート番号(今回は8787)を入力する。

port-4

"Action" -> "Allow the connection" を選択し、"Next"。

port-5

"Profile" -> "Domain", "Private", "Public" すべてにチェックをいれ、"Next"。

port-6

ルールの名前とそのルールの説明を簡単に記載し、"Finish"。

port-7

ポート開放のルールが適応される。

いよいよ接続

上記のような準備が終わったら、別のネットワークから接続してみる。

Webブラウザを開き、アドレスバーに "http://グローバルIPアドレス:8787.html" と入れる。

Remote-RStudio-Server

Username と Password を要求されるので、

  • Username: rstudio
  • Password: 自分で設定したパスワード

を入れると……

rstudio-server-7

RStudio Server が立ち上がる。

docker-11

References