Java 减少多模块maven项目的Docker映像大小

Java 减少多模块maven项目的Docker映像大小,java,docker,maven,maven-assembly-plugin,multi-module,Java,Docker,Maven,Maven Assembly Plugin,Multi Module,我有一个由两个模块组成的多模块Maven项目:module1和module2。它们的依赖关系几乎相同,主要在父pom.xml中定义 module1/ src/... pom.xml module2/ src/... pom.xml pom.xml 我正在努力创建一个Docker映像,它允许我作为可执行JAR运行module1和module2,但不复制父pom.xml中的依赖项两次 更新 为了解决评论中的一些问题,我想创建一个docker映像,从中可以运行modu

我有一个由两个模块组成的多模块Maven项目:
module1
module2
。它们的依赖关系几乎相同,主要在父
pom.xml
中定义

module1/
    src/...
    pom.xml
module2/
    src/...
    pom.xml
pom.xml
我正在努力创建一个Docker映像,它允许我作为可执行JAR运行
module1
module2
,但不复制父
pom.xml
中的依赖项两次

更新 为了解决评论中的一些问题,我想创建一个docker映像,从中可以运行
module1
module2
的可执行JAR。它们不依赖于一个和另一个,完全分开运行。我想创建一个映像,因为(当然?!)它将有助于节省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>
com.example
父母亲
0.0.1-SNAPSHOST
聚甲醛
父母亲
模块1
模2
...
我想创建一个docker映像,从中可以运行 模块1和模块2的可执行JAR。他们不依赖于一个和另一个 另一个和运行完全分开。我想创建一个图像,因为 (当然?!)这将有助于节省docker主机上的磁盘空间

不要那样做。这可能是对Docker的误用。
如果应用程序
module1
完全不依赖于应用程序
module2
,则不应在同一图像中尝试将它们耦合,仅获得一个图像而不是两个图像。
首先,它将首先将图像作为单个图像放大,但总体而言,它会产生一种不良耦合:对
module1
图像进行编码/配置/更改可能会对
module2
图像产生副作用,反之亦然。此外,它还将耦合生命周期:您创建两个应用程序的映像的新版本,而只能更改一个应用程序。
有许多严重的缺点,也有一些小优点

我想创建一个docker映像,从中可以运行 模块1和模块2的可执行JAR。他们不依赖于一个和另一个 另一个和运行完全分开。我想创建一个图像,因为 (当然?!)这将有助于节省docker主机上的磁盘空间

不要那样做。这可能是对Docker的误用。
如果应用程序
module1
完全不依赖于应用程序
module2
,则不应在同一图像中尝试将它们耦合,仅获得一个图像而不是两个图像。
首先,它将首先将图像作为单个图像放大,但总体而言,它会产生一种不良耦合:对
module1
图像进行编码/配置/更改可能会对
module2
图像产生副作用,反之亦然。此外,它还将耦合生命周期:您创建两个应用程序的映像的新版本,而只能更改一个应用程序。

有许多严重的缺点,但也有一些小优点。

请出示您的Dockerfile。和pom.xml是否将
module1
module2
复制到同一docker容器中?如果是:为什么?如果这些模块之间存在依赖关系(例如从
module1
module2
),只需将一个模块的结果复制到容器中即可。“正确”的方法是创建一个浅jar,并将独立(早期)层中的依赖项复制到docker容器中。例如,请参阅。为什么在生成之前无法将带有所需DEP的.m2文件夹复制到两个映像?一个可能的解决方案是使用
-makesymlinks
选项。不过,这只适用于存在完全重复的文件的情况。谢谢大家的评论。我已经更新了我的问题,添加了更多细节。请显示您的Dockerfile。和pom.xml是否将
module1
module2
复制到同一docker容器中?如果是:为什么?如果这些模块之间存在依赖关系(例如从
module1
module2
),只需将一个模块的结果复制到容器中即可。“正确”的方法是创建一个浅jar,并将独立(早期)层中的依赖项复制到docker容器中。例如,请参阅。为什么在生成之前无法将带有所需DEP的.m2文件夹复制到两个映像?一个可能的解决方案是使用
-makesymlinks
选项。不过,这只适用于存在完全重复的文件的情况。谢谢大家的评论。我更新了我的问题,补充了一些细节。