在单独的Docker容器中运行两个Maven项目

时间:2019-04-13 20:39:41

标签: maven docker

我有两个maven spring boot应用程序,为此我设置了两个docker文件。 在每个容器内,我正在执行Maven安装。 这两个容器正在为依赖项进行大量下载,并最终打包了应用程序。

由于这两个容器是按顺序构建的,因此我可以与第二个容器共享第一个容器的Maven本地存储库,以便第二个容器的Maven安装将跳过本地可用的依赖项,而仅获取其pom中提到的额外库吗?

2 个答案:

答案 0 :(得分:0)

是的,可以。

我们做类似的事情,以便我们的构建始终干净。但是,为了节省Maven下载的时间,我们使用挂载在m2目录中的docker卷,以便可以在build和docker容器之间使用这些下载。

docker run -v m2Repository:/root/.m2 some-image

docker run -v m2Repository:/root/.m2 some-other-image

第一次运行需要一段时间,但是以下构建速度要快得多。

答案 1 :(得分:0)

您没有提到正在运行的环境,因此我想分享我的Bitbucket Pipelines CI解决方案。

我们在Bitbucket Pipelines CI中构建了约20个容器,每个容器都是具有几乎相同的依赖关系的Java应用程序。 Bitbucket Pipelines CI使用Docker映像来运行构建(是,they are using Docker images to build Docker images)。有一个选项可以指定用于构建的Docker映像。

为避免一遍又一遍地下载所有依赖项并减少构建时间,我构建了自定义Docker映像,其中包含我们所有模块的所有外部依赖项。使用每个模块中的Maven命令收集所有依赖项:

mvn -Dmaven.repo.local=c:/projects/bitbucket-pipelines-baseimage/local-maven-repo clean install

之后,我从临时存储库“ c:/ projects / bitbucket-pipelines-baseimage / local-maven-repo”中删除了项目的工件,并构建了包含该临时存储库的Docker映像。该映像已部署到Docker Hub,现在我们在Bitbucket Pipelines中构建的所有映像都在使用它。构建时间大大减少了!