2

我一直在尝试为我的 spring-boot-application 创建一个多阶段的 docker 构建。问题在于 master 分支上的每次更改,pom.xml 文件更改(感谢 maven 发布插件),因此在构建阶段使用 docker build-cache 有点困难,并且所有依赖项都会下载我运行构建的时间。据我所知,在构建映像期间我无法安装卷。docker 的实验版本允许您在构建过程中安装卷,但它仍然是实验性的,所以我试图避免它。

所以我决定用 docker-compose 试试运气,第一个服务将在容器内运行“mvn package”并在共享卷内创建一个 jar 文件,然后第二个服务将使用该文件构建自己的图像(基本上是在它的图像中添加那个 jar),它将被发布到 docker hub。无论我试图做什么似乎都不对。现在我在这里并不是真正的 docker-compose 专家,但这是正确的方法吗?
我在用着Docker version 18.09.0, build 4d60db4

version: '3'
#Specify all the services you want to create
services:
  #service name
  build-service:
    context: .
    dockerfile: Dockerfile-build
    volumes:
      - ./:/usr/app
      - "$(HOME)"/.m2:/usr/mvn/.m2
  spring-app:
    conext: .
    dockerfile: Dockerfile-jar
    volumes:
      - ./:/usr/app

有没有办法在第一阶段使用本地 .m2 存储库。或者欢迎任何其他建议。

4

1 回答 1

2

简短的回答是你不能。在构建期间使用 maven 存储库的唯一方法是在第一阶段将其复制到映像中。但是您不能这样做,因为通常 maven 存储库的位置在您的构建上下文之外。当然,您可以为您的项目更改它(将 .m2 文件夹放在当前项目中),然后这种方法可能会起作用。我不推荐这种方法,我只是提到它作为一种选择。

但是,我认为您可以通过遵循在开发期间不使用 Docker 的最佳实践来解决您的问题。虽然 Docker 是一个很棒的工具,但它确实减慢了开发速度。映像的构建和推送应委托给您的 CI/CD 管道(Jenkins、Gitlab CI 等)。在日常活动中,仅在本地运行 Maven 构建会更好更快。

于 2019-08-13T05:43:19.073 回答