2016-09-21 6 views
0

У меня есть работающее приложение java ee, использующее wildfly и mysql. Теперь я слышал, что докер использует всех, и он очень продуктивен, поэтому я решил закрепить мою среду разработки. Звучит легче, чем есть.Maven run docker image with java ee application

Что я до сих пор:

  • Maven для упаковки моего приложения в .war файл
  • Arquillian модульных тестов, которая проходит испытание на моем локально установленного wildfly экземпляра

Что я хочу:

  • Использование предопределенных изображений докеров (jboss/wildfly, ...) для запуска моего приложения.
  • Также выполняются мои тесты в контейнере докера.

Я начал строить Docker изображение с 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. Построение Docker изображений (wildfly, MySQL ...)
  3. Run arquillian тесты JUnit
  4. Deploy приложение и выставить его с помощью локального хоста: 8080
  5. Стоп контейнер, если новый Deploy сделан

Я действительно боролся за g с этим. Кто-нибудь подумает, как это сделать?

ответ

3

нет прямого способа сделать это - поскольку некоторые задачи докера не могут быть легко отображены на фазу maven. Поэтому вам нужно выбрать, какой предпочтительный способ работы для вас.

Так некоторые мысли, которые мы надеемся, приведет к решению:

Spotify-докер-Maven плагин не имеет харизмы (в maven goals), чтобы запустить изображение. Его основные задачи - создание и публикация изображений докеров.

Чтобы запустить изображение, вы можете просто написать несколько сценариев bash (поскольку они будут простыми, они будут работать на Linux и даже с помощью окон командной строки git bash). Вы можете выполнить эти сценарии, используя maven-exec-plugin.

Чтобы правильно отобразить это, жизненный цикл maven немного сложнее.

Фаза, которая соответствует этому лучшему (только по моему мнению) - integration-test phase.Эта фаза имеет фазу предварительной интеграции, тестовую фазу интеграции и этап после интеграции. Идея состоит в том, чтобы запустить контейнеры в предварительной фазе. Затем запустите тесты на фазе интеграции, используя failsafe-plugin (не позволяя сборке не работать!) И очищая контейнеры в постфазе. Будет хорошей идеей также очищать контейнеры этого проекта на предварительной фазе - на всякий случай, когда вокруг появятся какие-то зомби-контейнеры.

Эти шаги могут быть помещены в профиль. Поскольку фаза интеграционного теста также необходима для интеграционных тестов, можно завершить выполнение «maven verify» с различными профилями (mvn verify & & mvn verify -P docker-tests & & mvn -P docker-other-tests).

Другим подходом будет использование maven plugin created by fabric8. Этот плагин немного сложнее, чем тот, который создан методом spotify (опять же: только мое мнение). Но это происходит вместе с большим количеством целей.

Использование прилагаемого <packaging>docker</packaging> плагина для запуска и остановки докеров - already mapped to the lifecycle.

Оба плагина имеют в итоге аналогичную сложность в pom.xml - просто его более чтение с плагином для ткани. Но есть несколько хороших examples and a good user manual.

Так вот эти два варианта, которые пришли мне на ум. Надеюсь, это поможет :)

1

В качестве альтернативы прямому использованию контейнера JBoss Wildfly вы также можете проверить Wildfly Swarm. Это отдельный дистрибутив Wildfly с еще большим количеством лакомства в отношении докеров.

+0

Я обязательно посмотрю на это! выглядит очень многообещающим. Давайте посмотрим, как он будет играть вместе с отдельным контейнером базы данных. – perotom