Приложения Java EE обычно создаются и упаковываются с использованием Maven. Например, github.com/javaee-samples/javaee7-docker-maven является тривиальным приложением Java EE 7 и показывает зависимость Java EE 7:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
<dependencies>    <dependency>        <groupId>javax</groupId>        <artifactId>javaee-api</artifactId>        <version>7.0</version>        <scope>provided</scope>    </dependency></dependencies> | 
И два плагина Maven, которые компилируют исходный код и создают файл WAR:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
 | 
<plugin>    <artifactId>maven-compiler-plugin</artifactId>    <version>3.1</version>    <configuration>        <source>1.7</source>        <target>1.7</target>    </configuration></plugin><plugin>    <artifactId>maven-war-plugin</artifactId>    <version>2.3</version>    <configuration>        <failOnMissingWebXml>false</failOnMissingWebXml>    </configuration></plugin> | 
Затем это приложение можно развернуть в контейнере Java EE 7, таком как WildFly , с помощью wildfly-maven-plugin :
| 
 1 
2 
3 
4 
5 
 | 
<plugin>    <groupId>org.wildfly.plugins</groupId>    <artifactId>wildfly-maven-plugin</artifactId>    <version>1.0.2.Final</version></plugin> | 
Тесты могут быть вызваны с использованием Arquillian, снова с использованием Maven. Поэтому, если вы хотите упаковать это приложение в образ Docker и запустить его в контейнере Docker, должен быть механизм для плавной интеграции в рабочий процесс Maven.
Docker Maven Плагин
Встречайте Docker-Maven-плагин !
 Этот плагин позволяет вам управлять образами Docker и контейнерами из вашего pom.xml .  Это идет с предопределенными целями: 
| Цель | Описание | 
|---|---|
 docker:start  | 
Создать и запустить контейнеры | 
 docker:stop  | 
Останови и уничтожь контейнеры | 
 docker:build  | 
Строить изображения | 
 docker:push  | 
Push изображения в реестр | 
 docker:remove  | 
Удалить изображения с локального хоста докера | 
 docker:logs  | 
Показать журналы контейнеров | 
Введение представляет собой введение в плагин высокого уровня, включая создание образов, запуск контейнеров и конфигурацию.
Запустите приложение Java EE 7 как Docker-контейнер, используя Maven
TLDR;
- Создайте и настройте Docker Machine, как описано в разделе Docker Machine для настройки Docker Host.
 -   Клонировать рабочую область как: 
git clone https://github.com/javaee-samples/javaee7-docker-maven.git -   Создайте образ Docker как: 
mvn package -Pdocker -   Запустите контейнер Docker как: 
mvn install -Pdocker -   Узнайте IP-адрес Docker Machine как: 
docker-machine ip mydocker -   Доступ к вашему приложению
12
javaee7-docker-maven> curl http://192.168.99.100:8080/javaee7-docker-maven/resources/persons<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><collection><person><name>Penny</name></person><person><name>Leonard</name></person><person><name>Sheldon</name></person><person><name>Amy</name></person><person><name>Howard</name></person><person><name>Bernadette</name></person><person><name>Raj</name></person><person><name>Priya</name></person></collection> 
Настройка подключаемого модуля Docker Maven
Давайте посмотрим немного глубже в нашем примере приложения.
  pom.xml добавлен docker-maven-plugin : 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
 | 
<plugin>    <groupId>org.jolokia</groupId>    <artifactId>docker-maven-plugin</artifactId>    <version>0.11.5-M1</version>    <configuration>        <images>            <image>                <alias>user</alias>                <name>arungupta/javaee7-docker-maven</name>                <build>                    <from>arungupta/wildfly:8.2</from>                    <assembly>                        <descriptor>assembly.xml</descriptor>                        <basedir>/</basedir>                    </assembly>                    <ports>                        <port>8080</port>                    </ports>                </build>                <run>                    <ports>                        <port>8080:8080</port>                    </ports>                </run>            </image>        </images>    </configuration>    <executions>        <execution>            <id>docker:build</id>            <phase>package</phase>            <goals>                <goal>build</goal>            </goals>        </execution>        <execution>            <id>docker:start</id>            <phase>install</phase>            <goals>                <goal>start</goal>            </goals>        </execution>    </executions></plugin> | 
Каждая конфигурация изображения состоит из трех частей:
- Название изображения и псевдоним
 -   
<build>который определяет, как создается изображение. Базовый образ, артефакты сборки и их зависимости, порты, которые будут выставлены, и т. Д., Которые будут включены в образ, указаны здесь. Формат дескриптора сборки используется для указания включаемых артефактов и определяется в каталогеsrc/main/docker.assembly.xmlв нашем случае выглядит так:010203040506070809101112<assembly. . .><id>javaee7-docker-maven</id><dependencySets><dependencySet><includes><include>org.javaee7.sample:javaee7-docker-maven</include></includes><outputDirectory>/opt/jboss/wildfly/standalone/deployments/</outputDirectory><outputFileNameMapping>javaee7-docker-maven.war</outputFileNameMapping></dependencySet></dependencySets></assembly> -   
<run>который определяет, как выполняется контейнер. Порты, которые должны быть выставлены, указаны здесь. 
  Кроме того, фаза package связана с docker:build цель docker:build и фаза install связана с docker:start цель docker:start . 
Есть четыре Docker-Maven-плагин, и вы можете прочитать больше деталей в перестрелке о том, что служит вашим целям лучше всего.
Как вы создаете образы Docker из существующих приложений?
Наслаждайтесь!
| Ссылка: | Java EE, Docker и Maven (Tech Tip # 89) от нашего партнера по JCG Аруна Гупта в блоге Miles to go 2.0… . |