Уменьшение размера образа Docker для многомодульного проекта maven

У меня есть многомодульный проект Maven, состоящий из двух модулей: module1 и module2. Их зависимости, которые почти одинаковы, в основном определены в родительском pom.xml.

module1/
    src/...
    pom.xml
module2/
    src/...
    pom.xml
pom.xml

Я изо всех сил пытаюсь создать образ Docker, который позволяет мне запускать module1 и module2 как исполняемые файлы jar, но не копирует зависимости в родительском pom.xml дважды?

Обновлять

Чтобы ответить на некоторые вопросы в комментариях, я хотел бы создать один образ докера, из которого я могу запускать исполняемые файлы jar для module1 и module2. Они не зависят ни от одного, ни от другого и выполняются совершенно отдельно. Я хочу создать один образ, так как (конечно?!) он поможет сэкономить место на диске на хосте Docker.

Родитель pom.xml:

<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOST</version>
<packaging>pom</packaging>
<name>parent</parent>
<modules>
    <module>module1</module>
    <module>module2</module>
</modules>
<dependencies>
 ...
</dependencies>

person Community    schedule 25.07.2020    source источник
comment
Покажите свой Dockerfile, пожалуйста. И пом.xml   -  person andreoss    schedule 25.07.2020
comment
Вы копируете module1 и module2 в один и тот же док-контейнер? Если да: почему? Если между этими модулями есть зависимость (например, от module1 до module2), должно быть достаточно скопировать результат только одного модуля в контейнер. Правильным подходом было бы создать неглубокую банку и скопировать зависимости в отдельный (более ранний) слой в контейнер докера. См., например. как quarkus копирует зависимости.   -  person Turing85    schedule 25.07.2020
comment
Почему вы не можете скопировать папку .m2 с необходимыми отпечатками на оба образа перед сборкой?   -  person Sergio Santiago    schedule 26.07.2020
comment
Одним из возможных решений может быть использование rdfind с параметром -makesymlinks. Однако это работает только в том случае, если есть файлы, которые являются точными дубликатами.   -  person Nick ODell    schedule 26.07.2020
comment
Спасибо всем за ваши комментарии. Я обновил свой вопрос с некоторыми подробностями.   -  person    schedule 26.07.2020


Ответы (1)


Я хотел бы создать один образ докера, из которого я могу запускать исполняемые файлы jar для модуля1 и модуля2. Они не зависят ни от одного, ни от другого и выполняются совершенно отдельно. Я хочу создать один образ, поскольку (конечно?!) он поможет сэкономить место на диске на хосте докеров.

Не делай этого. Вероятно, это неправильное использование Docker.
Если приложение module1 вообще не зависит от приложения module2, не следует пытаться соединить их в одном образе только для того, чтобы получить один образ вместо двух.
Во-первых, сначала изображение будет больше, чем отдельное, но в целом это создает нежелательную связь: код/конфигурация/изменения на module1 изображении могут вызвать побочные эффекты на module2 изображении и наоборот. Кроме того, это также свяжет жизненный цикл: вы создаете новую версию образа обоих приложений, а изменить можно только одно приложение.
Множество серьезных недостатков за небольшими достоинствами.

person davidxxx    schedule 26.07.2020