这些天,每个人都在谈论微服务。 关于如何在企业级应用这些原则,有很多意见和想法,而很少有示例。 可以肯定的是,即使在几天前的会议上,我也很少发现有人在生产环境中运行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

Docker容器中的WildFly Swarm JAX-RS微服务相关推荐

  1. docker网络问题解决办法“大全”:关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法

    docker网络问题解决办法"大全":关于宿主机访问不了docker容器中web服务,或者容器内访问不了外网的问题的解决办法 参考文章: (1)docker网络问题解决办法&quo ...

  2. 如何在Docker容器中挂载主机目录

    本文翻译自:How to mount a host directory in a Docker container I am trying to mount a host directory into ...

  3. docker安装_以简便的方式监控Docker容器中的ADF应用程序

    docker安装 在这篇简短的文章中,我将展示一种简单的方法来确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序. 我将使用标准工具JConsole,它是计算机上JD ...

  4. Docker容器中MySQL最大连接数被限制为214的解决方案

    Docker容器中MySQL最大连接数被限制为214的解决方案 原文:Docker容器中MySQL最大连接数被限制为214的解决方案 一.背景 话说笔者在上次的博客里简单的讲了一下调整MySQL最大连 ...

  5. Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法

    Navicat 远程连接docker容器中的mysql 报错1251 - Client does not support authentication protocol 解决办法 1).容器中登录my ...

  6. Docker(三):镜像导入与导出、保存与加载、在Docker容器中安装软件

    相关阅读: Docker(一):Docker的安装与常用命令 Docker(二):Docker常用命令之镜像的创建:Dockerfile 与 commit Docker(三):Docker镜像导入与导 ...

  7. docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序

    docker 容器监控 在这篇简短的文章中,我将展示一种简单的方法来确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序. 我将使用标准工具JConsole,它是计算机 ...

  8. 轻松监控Docker容器中的ADF应用程序

    在这篇简短的文章中,我将展示一种简单的方法,以确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序. 我将使用标准工具JConsole,它是计算机上JDK安装的一部分. ...

  9. 解决:bash: vim: command not found、docker 容器不识别 vi / vim 、docker 容器中安装 vim

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 在 Docker 容器中编辑文件,报错如下: bash: vim: command not f ...

最新文章

  1. boost::mp11::mp_count_if相关用法的测试程序
  2. data.name.toLowerCase() is not a function问题
  3. 关于Redis配置主从复制踩到的坑,主机不显示从机的连接信息
  4. 史上最难吃系列,肯德基就不能好好做鸡吗?
  5. oracle11 dataguard,探索Oracle之11g DataGuard
  6. 中国目前拥有的人造卫星的种类及其作用
  7. win7文件和文件夹可以重名吗_怎么取消WIN7复制同名文件自动重命名
  8. 计算机键盘pausebreak,pause break键的作用 不得不-知的电脑技巧
  9. 程序员真的是这个世上最奇怪的生物吗
  10. 【萌新笔记】简单记录“智能管家”的设计过程
  11. 【ToyDB-Rust】超详细介绍
  12. 【CRM】ReferenceError: XXX is not defined at eval(eval at RunHandlerInternal)
  13. C++初级主题--名字空间域和类域
  14. Android自定义键盘的简单实现
  15. python绘制单线图_如何绘制管道单线图
  16. 基于c语言实现的个人理财系统,基于Android的个人理财系统—设计和实现-论文最终版.doc...
  17. 排序的几种方法(合并,快速,冒泡排序)
  18. C语言程序——变量及其应用
  19. jsp页面input的value中的值含英文双引号处理方法
  20. 2015年计算机职称考试科目,2015年职称计算机考试科目Windows XP考前练习题15

热门文章

  1. Java工程师必备技能
  2. hibernate注解的测试
  3. java异常了还会往下走吗_异常一个问题,请帮下忙:处理异常后,程序会继续往下运行吗...
  4. java动脑公开课_java课堂动手动脑
  5. 摘要算法与加密(以MD5算法为例)
  6. 转-SpringBoot——使用外置的Tomcat服务器
  7. jedis对redis键加锁+解锁+事务提交
  8. RabbitMQ--topic
  9. java 开发:md5_Java社区调查结果:74%的开发人员希望减少详细程度
  10. selenium架构_Selenium测试的干净架构