首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker-compose -使用maven构建重用maven存储库

Docker-compose -使用maven构建重用maven存储库
EN

Stack Overflow用户
提问于 2018-09-01 02:16:34
回答 1查看 15.2K关注 0票数 7

在使用Maven构建Spring-boot映像时,我现在在Dockerfile中执行此操作。Maven将下载所有依赖项,然后编译我的文件。这需要相当长的时间。

如何通过docker-compose (Dockerfile)指定构建过程重用我的“Maven "Windows10存储库?因此,(新的)下载量是最小的。我的开发环境:我使用Docker快速入门终端,所以使用docker-machine。

is是我的docker-compose.yml文件的一部分:

代码语言:javascript
复制
version: '3'
services:
  spring-boot-app:
    image: spring-boot-image
    build:
      context: ./
      dockerfile: Dockerfile
    depends_on:
      - mysql-docker-container
    ports:
      - 8087:8080
    volumes:
      - $HOME/.m2/repository:/root/.m2/repository
      - /data/spring-boot-app

我的Dockerfile是:

代码语言:javascript
复制
FROM java:8
FROM maven:alpine
WORKDIR /app
COPY . /app
RUN mvn -v
RUN mvn clean install -DskipTests
EXPOSE 8080
LABEL maintainer=“xyz@holland.nl”
ADD ./target/spring-boot-example-0.0.1-SNAPSHOT.jar /developments/
ENTRYPOINT ["java","-jar","/developments/spring-boot-example-0.0.1-SNAPSHOT.jar"]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-01 22:37:19

@Jack Gore -非常感谢你给我指路。我已经看过这篇文章了,但还没有一个明确的答案。在深入研究了所有独立的答案后,这些信息既为我提供了症状的答案,也为我提供了如何解决类似问题的见解。

ANSWER:通过ANSWER文件,您可以通过1层或多层后续镜像构建最终的镜像。为了避免该步骤每次都重新下载依赖项,您可以为依赖项的“下载世界”创建一个图像层。仅当pom.xml文件中的依赖项发生更改时,才会重新下载。

为此,您将do文件拆分为两个构建步骤:首先复制pom.xml文件并构建它。这将创建一个包含所有依赖项的图像层。作为第二步,您将构建应用程序。

代码语言:javascript
复制
FROM java:8
FROM maven:alpine

# image layer
WORKDIR /app
ADD pom.xml /app
RUN mvn verify clean --fail-never

# Image layer: with the application
COPY . /app
RUN mvn -v
RUN mvn clean install -DskipTests
EXPOSE 8080
ADD ./target/your.jar /developments/
ENTRYPOINT ["java","-jar","/developments/your.jar"]

然后,您将获得以下构建场景:

  • first you build this (docker build .)将下载依赖项,并在步骤2中构建应用程序jar。
  • 当您立即重建时,依赖项(pom.xml)和应用程序源未更改。因此,不需要更改图像层。构建工作很快就准备好了。
  • 如果您更改了1个应用程序源文件,则只会下载几个文件并构建应用程序。所以你不是在下载世界。
  • 如果您更改了pom.xml文件,从而更改了依赖项,则所有依赖项下载都将完成。

分离图像层的影响通过number of very short videos显示。

这种构建方式的缺点当然是最终(生产)映像包含的内容多于应用程序。不仅JAR在其中,还有许多依赖项。

如何解决这个图像太大的问题:

  • 通过一个技巧减小图像大小。使用选项:--squash。这在this post中有解释。
  • 将构建过程(此处为: maven和/或ng build --prod)作为docker构建步骤之前的一个步骤。然后执行docker构建,并仅将jar文件放入最终映像中。
  • 使用CI/CD环境,例如Jenkinsfile (管道)。在Jenkins管道中,首先构建映像。所有依赖项都已经存在。您只需重新构建应用程序。执行docker构建等。

对我来说,这是最好的选择。您可以自动执行此过程,并保持较小的图像大小。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52120845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档