通过Docker分发桌面Web应用

两周前,我们研究了如何用Java webapps取代桌面Java应用程序 。 现在是时候考虑分发此类桌面 Web应用程序了。

目前的趋势是使用Docker 。 我认为读者至少对这项技术很熟悉。 最简单的方法是创建WAR并将其交付到Tomcat映像中。 另一种选择是按照上一篇文章创建一个嵌入了Tomcat的胖JAR,然后在仅具有JRE的映像中运行它。

决定因素之一是所得图像的大小。 有趣的是,第二个选项是最佳选择,因为Tomcat嵌入式是常规发行版的精简版本。

关于大小要获得最小的映像,应该选择基于Alpine Linux的容器,而不是更完整的Linux发行版(例如Debian)。 要进一步缩小图像,请使用jlink,它是Java 9的一部分。不幸的是,在撰写本文时,Alpine还没有JRE 9图像。 另一种节省几千字节的方法是用Jetty替换嵌入式Tomcat:pom.xml <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> vaadin-spring-boot-starter </ artifactId> <exclusions > <exclusion> <groupId> org.springframework.boot </ groupId> <artifactId> spring-boot-starter-tomcat </ artifactId> </ exclusion> </ exclusions> </ dependency> <dependency> <groupId> org。 springframework.boot </ groupId> <artifactId> spring-boot-starter-jetty </ artifactId> </ dependency>

可能的Dockerfile可能如下所示:

Docker文件
FROM openjdk:8-jre-alpine

ARG JAR_FILE
ADD ${JAR_FILE} /usr/share/renamer.jar

ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/renamer.jar"]

有了它,就可以创建相对可接受大小的图像:

nfrankel/renamer   0.0.1-SNAPSHOT   f8ed5f177771   38 minutes ago   113MB

对于Maven集成,我使用Spotify中的dockerfile-maven-plugin 。 这是一个如何使用它的示例:

pom.xml
<plugin>
  <groupId> com.spotify </groupId>
  <artifactId> dockerfile-maven-plugin </artifactId>
  <version> 1.4.0 </version>
  <executions>
    <ecution>
      <id> default </id>
      <goals>
        <goal> build </goal>
        <goal> push </goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <repository> nfrankel/renamer </repository>
    <tag> ${project.version} </tag>
    <buildArgs>
      <JAR_FILE> target/${project.build.finalName}.${project.packaging} </JAR_FILE>
    </buildArgs>
  </configuration>
</plugin>

生成映像后,启动容器很简单:

docker run-ti-p 8080:8080 -v /tmp/foo:/tmp/foo nfrankel/renamer:0.0.1-SNAPSHOT
映射端口很常见。 如果应用程序需要与文件系统进行交互(就像某些(大多数?)桌面应用程序一样),则还需要映射卷。

至此,所有设置均已启动。 但是,一个新问题浮出水面:“如何在Docker中启动浏览器?”

Docker无法在主机系统上打开浏览器。 解决方法是在映像中安装浏览器,启动它,然后通过X11在主机上显示它。 但是,这样做有两个缺点:

  1. 这不是小事。 在我的Mac上,它要求:
    • 安装用于X11仿真(XQuartz)的专用软件
    • 所述软件的配置
    • 传递其他参数以使Docker运行:
      docker run-ti-eDISPLAY= 192.168.1.73:0 -p 8080:8080  -v /tmp/.X11-unix:/tmp/.X11-unix nfrankel/renamer:0.0.1-SNAPSHOT
  2. 它大大增加了图像的大小!

最后,最好让它离开图像,并创建简单的多平台脚本来实现相同目的。

SonarQube发行版就是一个很好的例子。 它提供以下操作系统的脚本:Linux 32位和64位OSX Windows 32位和64位

结论

Docker是分发嵌入servlet的Web应用程序的好方法。 但是,它与桌面系统集成不是很好,因为与主机系统进行交互并不容易。

可以在Github上以Maven格式找到此文章的完整源代码。

翻译自: https://blog.frankel.ch/distributing-desktop-webapps/1/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值