基于 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

通过浏览器登录

本地宿主机访问

http://localhost:6080/vnc.html

远程访问(先获取 IP 地址)

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

远程访问

http://172.17.0.1:6080/vnc.html

自主构建方式

$ 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 docker@localhost -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 .

你可能感兴趣的:(linux)