2016-09-21 94 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

相關問題