在同一臺 Docker 主機上建立多個 R-Studio container 讓多人使用


R-Studio 是 R 語言的一個整合開發環境. 一般情況下,使用如下命令可以在Docker主機上運行一個 R-Studio container,

# create and run a rstudio container
$ docker run --rm --name rstudio -dit -p 8787:8787 rocker/rstudio:3.4.0

接下來,同一台主機上打開瀏覽器輸入
http://localhost:8787

可以看到類似如下登入畫面:

username: rstudio
password: rstudio

登入後,在主機上就可以開始通過瀏覽器來打開 R-Studio IDE 畫面進行 R 程式開發。

在個人電腦上一個人這樣使用是OK的。

曾經有人問過一個問題:可不可以在同一臺(擁有豐沛硬體資源的)主機上建立多個 R-Studio container 讓多人連線進來使用而且彼此又不會互相干擾到資料或代碼呢?

答案是可以的, 但有一些地方需要留意. 方法如下:

先爲每一個主機上的使用者建立目錄, 記下這個使用者在系統上的的user id (可以通過主機上的 vigr 系統命令查看變更);
然後爲每一使用者指定一個遠端可存取的 HTTP port ;
接着通過下列命令建立新的 container 的同時, 綁定對應的 HTTP port 以及資料目錄,


$ docker run -dit --rm \
-p {user-ports}:8787 -v {user-home-dir}/R:/home/rstudio/R -e USERID={host-user-id} \
--name rstudio-{user-name} rocker/rstudio:3.4.0


需要注意的地方是, 必須傳入一個環境變數 (USERID) 給 rstudio, 是當前這個主機的一使用者的 user id, 如前所述, 可以通過主機上的 vigr 系統命令查看. 如果不加這個環境變數即使每個container有不同的volume綁定仍是無法正常運行的!

舉個例子,假設有一個 user, 在主機上的 username 是 hans, 對應的 user id 是 1003,爲 hans 開放存取的 HTTP port 設定爲 9993, 想要爲他在主機上建立一個可用的 R-Studio container 環境, 則

# create and run a rstudio container for hans 
$ docker run -dit --rm \
   -p 9993:8787 -v /home/hans/R:/home/rstudio/R -e USERID=1003 \
   --name rstudio-hans rocker/rstudio:3.4.0 

接下來,使用者 hans 打開瀏覽器輸入 (假設Docker主機IP address爲 172.16.123.124.)
http://172.16.123.124:9993

就可以看到如上述的 R-Studio IDE 登入畫面. 帳密不變.

在主機上每一個使用者目錄 /home/{users}/R 子目錄要先建立好, 這個路徑是讓每一個使用者用來存放自己R代碼的地方, container 裡面對應目錄 /home/rstudio/R 不用事先建立.

爲需要連線進來的使用者重覆執行上述步驟, 建立多個 rstudio container. 這樣就可以在同一臺主機上建立多個 rstudio container 讓每一個人都可以自行使用, 由於運行時使用的 image 都是一樣的, 因此每個人的IDE環境配置都是相同的. 而每個人可保存自己的代碼, 彼此不會互相干擾到.

靈活的彈性正是 Docker 容器化技術的優勢之一.

留言

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置