Приложения 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… . |