我有一个运行java ee的应用程序,它使用的是wildfly和mysql。现在我听说docker正在使用所有人,它非常高效,所以我决定将我的开发环境停靠。听起来比较容易。
到目前为止:
我想要的是什么:
我首先使用maven-docker-plugin构建一个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命令:
我真的很挣扎。有人知道如何做到这一点?
答案 0 :(得分:3)
没有直接的方法可以做到这一点 - 因为有些docker任务无法轻松映射到maven阶段。因此,您需要选择适合您的首选方式。
所以有些想法希望能够找到解决方案:
spotify-docker-maven插件没有mojo(maven goals)来运行图像。其主要任务是创建和发布泊坞窗图像。
因此,要运行图像,您只需编写一些bash脚本(因为它们很简单,它们将使用git bash命令行在linux甚至Windows上运行)。您可以使用maven-exec-plugin执行这些脚本。
将其正确映射到maven生命周期有点棘手。
与此相匹配的阶段(仅限我的观点)是integration-test phase。该阶段具有预集成测试阶段,集成测试阶段和集成后测试阶段。我们的想法是在前期阶段启动容器。然后使用failsafe-plugin在集成测试阶段运行测试(不要让构建失败!)并在后阶段清理容器。在预阶段清理该项目的容器也是一个好主意 - 以防一些僵尸容器粘在一起。
这些步骤可以放入个人资料中。由于集成测试也需要集成测试阶段,因此最终会使用不同的配置文件执行“maven验证”(mvn验证&amp; mvn验证-P docker-tests&amp;&amp; mvn -P docker-other -tests)。
另一种方法是使用maven plugin created by fabric8。 这个插件比spotify创建的插件要复杂一点(再次:我的观点)。但它伴随着更多的目标。
使用插件提供的<packaging>docker</packaging>
,docker运行和停止目标为already mapped to the lifecycle。
这两个插件最终在pom.xml中都有类似的复杂性 - 只是它使用fabric插件的更多阅读。但有一些不错的examples and a good user manual。
所以这些是我想到的两个选择。希望这会有所帮助:)
答案 1 :(得分:1)
或者直接使用JBoss Wildfly容器,您也可以查看Wildfly Swarm。它是Wildfly的独立发行版,有更多关于docker的好东西。