1. 程式人生 > >基於 VNCServer + noVNC /ssh + Xpra構建 Docker 桌面系統

基於 VNCServer + noVNC /ssh + Xpra構建 Docker 桌面系統

VNCServer 是一個為了滿足分散式使用者共享伺服器資源,而在伺服器開啟的一項服務,對應的客戶端軟體有圖形化客戶端 VNCViewer,而 noVNC 則是 HTML5 VNC 客戶端,它採用 HTML 5 WebSockets, Canvas 和 JavaScript 實現。

noVNC 被普遍用在各大雲端計算、虛擬機器控制面板中,比如 OpenStack Dashboard 和 OpenNebula Sunstone 都用的是 noVNC。noVNC 採用 WebSockets 實現,但是當前蠻多 VNC 伺服器都不支援 WebSockets,所以 noVNC 不能直連 VNC 伺服器,而是需要開啟一個代理來做 WebSockets 和 TCP sockets 之間的轉換。這個代理叫做 websockify。

下載映象

docker pull dorowu/ubuntu-desktop-lxde-vnc

啟動容器並載入VNCServer服務

CONTAINER_ID=$(docker run -d -p 6080:80 dorowu/ubuntu-desktop-lxde-vnc)

獲得登陸密碼

docker logs $CONTAINER_ID | sed -n 1p
User: ubuntu Pass: ubuntu

通過瀏覽器登入

本地宿主機訪問

遠端訪問(先獲取 IP 地址)

docker exec $CONTAINER_ID ifconfig eth0 | grep "inet addr:"

遠端訪問

自主構建方式

$ git clone https://github.com/fcwu/docker-ubuntu-vnc-desktop.git
$ cd docker-ubuntu-vnc-desktop
$ docker build -t tinylab/ubuntu-desktop-lxde-vnc .

====================================
初識 Docker,發現大部分文章都只是介紹非 GUI 的應用。想到蠻多場景需要圖形化介面,所以蒐羅了一下 Docker 映象:

$ sudo docker search desktop
NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
dorowu/ubuntu-desktop-lxde-vnc          Ubuntu with openssh-server and NoVNC on po...   12                   [OK]
rogaha/docker-desktop                   Docker Desktop enables you to create virtu...   10                   [OK]

發現前兩名分別是:

dorowu/ubuntu-desktop-lxde-vnc:基於 VNCServer + noVNC 專案
rogaha/docker-desktop:基於 Ssh + Xpra 專案
一個基於 Web,一個基於傳統的圖形介面
上面的實驗室基於web頁面的,下面將介紹給予傳統圖形介面的

安裝映象

sudo docker pull rogaha/docker-desktop

啟動容器

CONTAINER_ID=$(sudo docker run -d -p 2222:22 rogaha/docker-desktop)

注:-p 2222:22 把容器內的 Ssh 埠地址 22 對映到主機的 2222 埠。

獲取登入密碼

echo $(sudo docker logs $CONTAINER_ID | sed -n 1p)

User: docker Password: aefieSahk2ci

連線桌面服務

通過 Ssh 啟動一個 Xpra 會話
執行如下命令並輸入上述密碼即可:

 ssh [email protected] -p 2222 "sh -c './docker-desktop -s 800x600 -d 10 > /dev/null 2>&1 &'"

注:

-p 2222 連上 docker 那邊的 ssh 服務
-s 800x600 設定桌面的解析度
-d 10 設定顯示服務會話編號

通過 Xpra Attach 上述會話(這裡會真正拉起圖形介面。)

xpra --ssh="ssh -p 2222" attach ssh:[email protected]:10

注意事項
有其他文章介紹上述兩步可直接通過如下命令載入:

ssh -Yc blowfish [email protected] -p 2222 ./docker-desktop -s 800x600 -d 11

自主構建
可直接拉下該映象的 Dockerfile 和相關檔案,自主構建。甚至根據自身需求,調整 Dockerfile 後再構建,以便滿足實際需求。

$ git clone https://github.com/rogaha/docker-desktop.git
$ cd docker-desktop
$ docker build -t tinylab/docker-desktop .