Maven运行与Java ee应用程序的docker图像

我有一个正在运行的java ee应用程序,它使用wildfly和mysql。 现在我听说Docker正在使用每个人,这是非常有效的,所以我决定dockerize我的开发环境。 听起来比现在更容易。

我到目前为止:

  • Maven将我的应用打包成一个.war文件
  • Arquillianunit testing在我的本地安装的wildfly实例上运行testing

我想要的是:

  • 使用预定义的泊坞窗图像(jboss / wildfly,…)来运行我的应用程序。
  • 也在Docker容器中运行我的testing。

我开始用maven-docker-plugin创build一个docker镜像:

<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>netbeans/sampleapplication</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.war</include> </resource> </resources> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </configuration> </plugin> 

Dockerfile:

 FROM jboss/wildfly COPY *.war /opt/jboss/wildfly/standalone/deployments/app.war EXPOSE 8080 9990 

Maven命令: clean package docker:build 。 我可以通过我的docker-maschine url访问应用程序服务器,而不像以前使用localhost。 最后,我只想使用一个单一的maven命令:

  1. 构build应用程序
  2. build立docker图像(wildfly,mysql …)
  3. 运行arquillian junittesting
  4. 部署应用程序并通过localhost:8080公开它
  5. 如果进行了新的部署,请停止容器

我真的很挣扎着。 谁知道如何做到这一点?

这样做没有直接的方法 – 因为一些docker任务不能很容易地映射到maven阶段。 所以你需要select一个最适合你的工作方式。

所以有些想法会导致一个解决scheme:

spotify-docker-maven插件没有mojo( maven目标 )来运行映像。 其主要任务是创build和发布docker图像。

所以要运行一个映像,你可以简单地写一些bash脚本(因为它们会很简单,它们将在linux甚至是使用git bash命令行的窗口上运行)。 你可以使用maven-exec-plugin来执行这些脚本。

要正确地将其映射到maven生命周期会更棘手一些。

匹配这个最好的阶段(我的观点)是集成testing阶段 。 该阶段具有预集成testing阶段,集成testing阶段和后集成testing阶段。 这个想法是在预先阶段启动集装箱。 然后使用故障安全插件 (不让构build失败!)在集成testing阶段运行testing,并在后期阶段清理容器。 在前期阶段清理该项目的容器也是一个好主意 – 以防万一一些僵尸容器在附近。

这些步骤可以放入configuration文件中。 由于集成testing也需要集成testing阶段,因此最终将执行不同configuration文件(mvn verify && mvn verify -P docker-tests && mvn -P docker-other-tests)的“maven verify”。

另一种方法是使用由fabric8创build的maven插件 。 这个插件比spotify创build的插件要复杂一点(再次:我的意见只)。 但它带有更多的目标。

使用插件提供的<packaging>docker</packaging> ,docker运行和停止目标已经映射到生命周期 。

这两个插件在pom.xml中最终都具有相似的复杂性 – 只是更多地阅读了fabric插件。 但是有一些很好的例子和一个很好的用户手册 。

所以这些是我想到的两个select。 希望这会帮助:)

也可以直接使用JBoss Wildfly容器,也可以查看Wildfly Swarm 。 这是Wildfly的一个单独的发行版本,甚至还有更多关于docker的好东西。