Docker容器:将带UI的程序直接转为Web应用,so easy

网友投稿 301 2022-10-19

Docker容器:将带UI的程序直接转为Web应用,so easy

摘要:使用Docker容器,将带UI的程序,直接转换为Web应用。很方便,跟大家分享一下。

本文分享自华为云社区《​​使用Docker容器,将带UI的程序,直接转为Web应用​​》,作者:tsjsdbd。

我们可以通过Docker容器,将App的UI界面,投射到任意的网络目的端。

即:

其原理是利用X11协议,把界面投射转化为网络协议,到达目的端显示出来。

但是这种方案,有一个硬性要求:就是目的端必须要安装一个“投屏软件(X11 Server)”,比如:VcXsrv 或者 MobaXterm。

那么用户想要看到App的界面,他就得额外安装一个软件,用户体验并不是最佳的。

一、VNC方案

Windows的远程桌面,相信大家都用过吧。 VNC就是Linux版的远程桌面。它可以将屏幕,通过网络共享给客户端。

在服务端,安装vncserver。 在客户端,安装vncviewer。

不过,windows是自带了一个 远程桌面客户端。对VNC的话,用户就得安装一个 vnc-viewer客户端。和X11方案差不多,还是不够方便。

二、noVNC方案

好消息是,VNC-Viewer有一个WEB版的客户端,叫做 noVNC。它直接打开网页,就获得VNC-Viewer能力。详见:​​​使用 Ubuntu:20.04 的基础镜像

因为最终我们要通过HTML访问这个容器,所以启动的时候,我们得记得开放端口:

docker run -it -p 80:8080 ubuntu:20.04 /bin/bash

在这个容器里面,启动上图中的各种Server。

2. Xvfb虚拟屏幕

首先,安装一个叫做 xvfb 的软件。这是一个“虚拟屏幕”,都在内存中模拟的屏幕。见:

​​install -y xvfb

然后启动“虚拟屏幕”:

Xvfb :0 -screen 0 1920x1080x24 -listen tcp -ac +extension GLX +extension RENDER

其中,1920x1080x24 表示:屏幕大小(分辨率)。 24则是像素深度。

这个屏幕大小,到时候可以根据App的界面效果自己调整。

3. X11vnc服务器

然后,我们安装 x11服务器(因为安装这个有交互,所以之类设置了 无交互模式)

export DEBIAN_FRONTEND=noninteractiveapt-get install -y x11vnc

然后启动 x11服务器:

x11vnc -forever -shared -noipv6 -passwd tsjsdbd

其中标红的password换成你自己喜欢的密码。

4. noVNC服务器

最后,我们通过noVNC服务器,将 VNC翻译为HTML服务,

安装:

apt-get install -y novnc

然后启动:

websockify --web /usr/share/novnc 8080 localhost:5900

5. 启动带UI的App

apt-get install x11-appsDISPLAY=:0.0 xclock

这里的DISPLAY变量的作用,是表示把App的界面,投射到咱们的这个“虚拟屏幕”上。

详细请看我之前的那篇文章。

6. 从浏览器访问

从浏览器,访问我们的容器。地址(因为我们启动容器用来ubuntu:20.04ENV DEBIAN_FRONTEND=noninteractiveRUN apt-get install -y novnc x11vnc xvfbEXPOSE 8080ENTRYPOINT ["/bin/bash"]

然后写个 start-novnc.sh 脚本:

#!/bin/bashset -e#虚拟屏幕Xvfb :0 -screen 0 1920x1080x24 -listen tcp -ac +extension GLX +extension RENDER > /dev/null 2>&1 &#vnc服务器x11vnc -forever -shared -noipv6 -passwd tsjsdbd > /dev/null 2>&1 &#novncwebsockify --web /usr/share/novnc 8080 localhost:5900 > /dev/null 2>&1 &

最后你启动app的时候,记得带上:

DISPLAY==========================================BN =:0.0 your-ui-app

就可以了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot整合Spring Boot Admin实现服务监控的方法
下一篇:Docker 通过服务名直接ping通 --link、自定义网络(关键)、网络连通
相关文章

 发表评论

暂时没有评论,来抢沙发吧~