这些天,每个人都在谈论微服务。 关于如何在企业级应用这些原则,有很多意见和想法,而很少有示例。 可以肯定的是,即使在几天前的会议上,我也很少发现有人在生产环境中运行Docker容器。 当我问起初次体验以及是否有人玩过时,至少举起了合理的手。 并查看运行容器化基础结构所需的所有操作级别知识(操作系统,网络等),我可以理解所有这些。 要使Enterprise Java开发人员更容易做到,必须做很多事情。 实际上,我们可以使用一些方法来使用日常工具,并将它们与最新技术结合起来以进行自我教育。 其中之一是WildFly Swarm,它是一种轻量级且简便的方法来构建完全包含的Java EE应用程序。 这篇博客文章将向您展示如何在Docker上本地运行它。
什么是WildFly Swarm?
WildFly是一款轻巧,灵活,功能丰富且符合Java EE 7的应用程序服务器。 WildFly 9甚至引入了仅27MB的Servlet发行版 。 两者都是Java Enterprise项目的坚实基础。 最新版本的WildFly 10.CR2将成为Red Hat的下一个受支持的Java EE服务器产品Enterprise Application Platform 7的基础。
WildFly Swarm摆脱了各种概要文件的静态捆绑,使您可以构建自己的定制功能Java EE运行时。 但是,WildFly Swarm不仅涉及定制的应用程序服务器,而且还涉及到定制的应用程序服务器。 它是关于将包含相关应用程序服务器组件的应用程序捆绑在一个可执行文件中。 这也称为“ fat-jar”,可以简单地使用java -jar运行。 当我们谈论它时:微服务通常将完整的应用程序及其堆栈带入其中,因此您可以将每个WildFly Swarm应用程序视为一个独立且完全包含的微服务。
将Java EE应用程序变成胖子
通过添加Maven依赖项和插件,可以将Java EE应用程序打包为WildFly Swarm胖子罐。 可以从https://github.com/myfear/WildFlySwarmDockerSample/获得该简单JAX-RS示例的完整源代码。 该应用程序本身公开了一个端点/ rs / customer,该端点仅输出一些文本。 真正的魔力被放入pom.xml文件中。 我们现在正在经历。
首先, 对Java EE 7 API的依赖关系 ,然后是
<dependency><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-jaxrs</artifactId><version>${version.wildfly-swarm}</version></dependency>
WildFly Swarm插件负责应用程序的打包:
<plugin><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-plugin</artifactId><version>${version.wildfly-swarm}</version><executions><execution><goals><goal>package</goal></goals></execution></executions></plugin>
这就是所有魔术。 您可以使用“ mvn软件包”来构建应用程序。 您将在目标文件夹中找到war文件本身以及一个附加附件“ swarm-sample-1.0-SNAPSHOT-swarm.jar”。 如果打开该文件夹,则可以找到一个m2repo文件夹,其中包含所有从属库,并且您的应用程序本身捆绑在_bootstrap \文件夹中。 您可以从maven项目中的命令行直接运行它(Windows用户可能会遇到此问题 ):
java -jar target/swarm-1.0-SNAPSHOT-swarm.jar
将浏览器重定向到http:// localhost:8080 / rs / customer将向您显示一些json
{"text":"WildFly Swarm Docker Application on OpenShift at http://192.168.99.100:32773/rs/ - Hostname: 093ca3279a43"}
Docker化WildFly Swarm
WildFly Swarm项目在github上有一些Docker示例。 大多数情况下,bash脚本和一些包装器可以对您的项目进行docker化。 但是还有更好的东西:Roland Huss的Docker Maven插件 。 我之前已经使用过几次,并且在本示例中也使用了它。 您所要做的就是将插件添加到pom.xml中 。
<plugin><groupId>org.jolokia</groupId><artifactId>docker-maven-plugin</artifactId><version>${docker.maven.plugin.version}</version>
</plugin>
配置有点棘手。 (感谢Roland在过去几天给我的所有电子邮件支持!)。 首先,基础很简单。 将图像添加到插件配置中,并相应地命名。 我继承自jboss / jdk-base:8,图像获得名称并标记为myfear / swarm-sample:latest( 第77ff行 )。 构建配置公开端口8080并定义相关入口点 (使用-jar参数启动java的命令)。 图像的组装需要包括项目附件 ,并将附件作为依赖项 。 确保输出服务映射和basedir与入口点参数匹配。
让我们对其进行测试
确保您的主机上具有docker-machine设置。 创建一个开发机器并相应地配置环境变量。 现在您可以运行:
mvn clean install docker:build docker:start -Ddocker.follow
( 注: 10.3.5 Docker Maven插件中的错误实际上现在无法立即提取基本映像。您需要在执行maven运行之前手动执行'docker pull jboss / jdk-base:8'。)
将构建该项目,并从映像启动一个容器。
恭喜,您现在在本地Docker实例中有一个正在运行的Java EE微服务。 下一个博客实际上将研究如何获取此图像并将其在OpenShift Origin上运行并根据您的需求进行缩放。
翻译自: https://www.javacodegeeks.com/2015/10/a-wildfly-swarm-jax-rs-microservice-in-a-docker-container.html