Статьи

Как Docker-ise ваше приложение Java с плагином Maven

Есть два плагина maven, которые вы можете использовать, чтобы легко добавить ваш Java Applicatoin в Docker.

Первый плагин, который вы можете использовать, это docker-maven-plugin от Fabric8

Второй — это Docker-Maven-плагин от Spotify.

Позвольте мне показать вам, как это сделать с помощью плагина Fabric8.

Обновите pom.xml

Просто добавьте такую ​​конфигурацию в ваш pom.xml, в части сборки, плагины.

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
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.20.1</version>
    <configuration>
        <images>
            <image>
                <name>${project.name}:${project.version}</name>
                <build>
                    <from>openjdk:9</from>
                    <assembly>
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                    <ports>
                        <port>8080</port>
                    </ports>
                    <cmd>java -jar maven/${project.name}-${project.version}.jar</cmd>
                </build>
                <run>
                    <ports>
                        <port>8080:8080</port>
                    </ports>
                </run>
            </image>
        </images>
    </configuration>
</plugin>

В этом случае я сообщаю плагину использовать базовый тег docker image openjdk 9 и создавать изображение docker по имени $ {project.name} с тегом $ {project.version} . Вы можете, конечно, жестко ввести имя здесь, если вы не хотите, чтобы оно было изменено.

После запуска контейнера он выполнит команду

  • java -jar maven / $ {project.name} — $ {project.version} .jar

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

Построить образ

Чтобы создать образ Docker, все, что сейчас нужно, это запустить эту команду

1
mvn docker:build

Подключите сборку образа докера к фазе Maven

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

1
2
3
4
5
6
7
8
9
<executions>
        <execution>
            <id>docker:build</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>

Теперь maven получает указание всегда создавать образ докера как часть фазы пакета .

Конечный результат

Полный плагин, добавленный в pom.xml, должен выглядеть следующим образом

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
<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.20.1</version>
    <configuration>
        <images>
            <image>
                <name>${project.name}:${project.version}</name>
                <build>
                    <from>openjdk:9</from>
                    <assembly>
                        <descriptorRef>artifact</descriptorRef>
                    </assembly>
                    <ports>
                        <port>8080</port>
                    </ports>
                    <cmd>java -jar maven/${project.name}-${project.version}.jar</cmd>
                </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>
    </executions>
</plugin>

Рабочий пример

Вы можете проверить все это в действии здесь

Опубликовано на Java Code Geeks с разрешения Владимира Деяновича, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Как Docker-ise ваше Java-приложение с плагином Maven

Мнения, высказанные участниками Java Code Geeks, являются их собственными.