基於 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 .