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

时间:2017-07-19 22:29:52

标签: maven docker

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

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

如果我理解多阶段构建我可以将第一阶段创建的文件复制到第二阶段,但理想情况下我希望能够从依赖关系的第一阶段“挂载”或“共享”该文件夹直播而不是复制文件,是否可能?或者有更好的方法来实现这一目标吗?

感谢。

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

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

但是由于pom文件大多数时候会有所不同(因为我希望跨项目共享这个阶段),以下解决依赖关系的步骤将再次下载所有这些(而不是使用缓存层)。 / p>

2 个答案:

答案 0 :(得分:0)

如果您不使用卷,则只能从第一阶段复制内容。使用卷时,您可以在阶段之间共享数据,这些阶段基本上是单独的容器实例。 由于缺少清理卷通常无法正确处理,我建议保持复制策略。使用bind-mount通过复制方法共享数据没有任何实际好处。

答案 1 :(得分:0)

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

要将第一阶段用作构建缓存并避免复制所有依赖项,我将在第一阶段运行您的构建。或者,如果您希望在各阶段之间进行额外分离,则可以创建第二个中间阶段FROM stage1name。然后可以将构建的输出复制到最终层,从而无需复制所有构建依赖项。