2016-09-21 39 views
0

我有一个正在运行的java ee应用程序,它使用wildfly和mysql。现在我听说Docker正在使用每个人,而且效率很高,所以我决定对我的开发环境进行dockerize。听起来比它更容易。Maven运行docker图像与java ee应用程序

是我到目前为止有:

  • Maven的包装我的应用程序到一个.war文件
  • 其运行测试在我的本地安装wildfly实例的Arquillian单元测试

我想要:

  • 使用预定义的泊坞窗图像(jboss/wildfly,...)来运行我的应用程序。
  • 也在码头集装箱中运行我的测试。

我开始通过与Maven的泊坞窗,插件建设一个码头工人形象:

<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. 构建应用程序
  2. 构建泊坞窗图像(wildfly,MySQL的...)
  3. 运行的Arquillian JUnit测试
  4. 部署应用程序并通过本地主机将其暴露:8080
  5. 停止容器是否有新的部署是由

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

回答

3

有没有这样做的直接方式 - 因为一些码头任务不能轻易映射到maven阶段。所以你需要选择一个适合你的首选方式。

这样的一些想法,希望能促成一个解决方案:

Spotify的 - 泊坞窗 - Maven插件没有魔力的(maven goals)运行的图像。其主要任务是创建和发布码头图像。

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

要正确地将它映射到maven生命周期会有点棘手。

与此最匹配的阶段(仅限我的意见)是integration-test phase。该阶段具有预集成测试阶段,集成测试阶段和后整合测试阶段。这个想法是在预先阶段启动容器。然后使用failsafe-plugin(不让构建失败!)在集成测试阶段运行测试,并在后期阶段清理容器。在前期阶段清理该项目的容器也是一个好主意 - 以防万一一些僵尸容器附着在上面。

这些步骤可以放入配置文件中。由于需要用于集成测试的集成测试阶段,以及,一个将结束执行“行家验证”具有不同的简档(MVN验证& & MVN验证-P搬运工检验& & MVN -P搬运工-其他检验)。

另一种方法是使用maven plugin created by fabric8。 这个插件比spotify创建的插件稍微复杂一些(再次:我的意见只)。但它带有更多目标。

使用插件提供的<packaging>docker</packaging>码头运行和停止目标是already mapped to the lifecycle

这两个插件在pom.xml中最终都有类似的复杂性 - 只是它更多地使用fabric插件进行阅读。但有一些不错的examples and a good user manual

所以这些是我想到的两种选择。希望这会有所帮助:)

1

除了直接使用JBoss Wildfly容器外,您还可以查看Wildfly Swarm。这是Wildfly的一个独立发行版本,它提供了更多有关docker的好东西。

+0

我一定会看看!看起来很有希望。让我们看看它将如何与独立的数据库容器一起玩。 – perotom

相关问题