Приложения 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
<?
xml
version
=
"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… . |