Docker多阶段构build和安装/前一阶段共享

我想使用多阶段构build来避免每次构build应用程序时都下载我的Java项目所需的所有Maven依赖项。

我正在考虑在第一阶段解决Maven依赖关系,然后在第二阶段构build应用程序,这需要访问前一阶段下载的依赖项。

如果我能很好地理解多阶段构build,我可以将在第一阶段创build的文件复制到第二阶段,但理想情况下,我希望能够从依赖项所在的第一个阶段“挂载”或“共享”文件夹,而不是复制文件,这有可能吗? 还是有更好的方法来实现这一目标?

谢谢。

编辑:
这是我想到的第一个阶段

FROM some-image-with-maven AS maven-repo WORKDIR /workspace/ COPY pom.xml . RUN mvn -B -f pom.xml dependency:resolve 

但是由于pom文件在大多数情况下是不同的(因为我想在项目中共享这个阶段),下面的解决依赖关系的步骤将再次下载它们(而不是使用caching层)。

如果您不使用卷,则只能从第一阶段复制内容。 使用卷时,您可以在基本上单独的容器实例的阶段之间共享数据。 由于缺less清理卷往往处理不当,我build议保持复制策略。 使用bind-mount在复制方法上共享数据没有真正的好处。

我不相信目前有办法做到这一点。 要从一个构build阶段共享到下一个,唯一的select是将文件从一个阶段的目录COPY到当前阶段。

要使用第一阶段作为构buildcaching并避免复制所有依赖项,我将在第一阶段运行构build。 或者,如果您希望在阶段之间另外分离,则可以创build第二个FROM stage1name中间阶段。 然后可以将构build的输出复制到最终层,避免需要复制所有构build依赖关系。