У меня есть приложение Java с некоторыми зависимостями, которые я хотел бы разбить на несколько Docker изображений:
- Ядро с прокси (nginx), JVM и драйверы базы данных -> практически не меняется
- Зависимости: все файлы Jar, от которых зависит мое приложение -> иногда меняется
- приложение: один дополнительный Jar -> меняется ежедневно или чаще (во время разработки)
Что-то вроде этого:
Я знаю, как создать эти Docker изображения вручную. Я также могу создать изображение docker в maven:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-version}</version>
<executions>
<execution>
<phase>pre-integration-test</phase>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<dockerfile>src/main/docker/dockerfile</dockerfile>
<repository>myprivateregistry.io:5000/repourl</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>myapp.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
Полагаю, я могу добавить плагин дважды, чтобы создать средний и верхний слой?
Однако я бы хотел чтобы начать только среднюю сборку, и только если содержимое target/libs
, которое содержит все Jar-файлы зависимостей, изменилось (новые Jar-файлы, новая версия Jar-файлов, удаление Jar-файлов)
Как мне это сделать?
В настоящее время мы используем Jenkins для запуска наших сборок (я бы предпочел решение «внутри maven»).