tm1*_*701 7 maven docker docker-compose
使用 Maven 构建 Spring-boot 映像时,我现在在 Dockerfile 中执行此操作。Maven 将下载所有依赖项,然后编译我的文件。这需要相当长的时间。
如何通过 docker-compose (Dockerfile) 指定构建过程重新使用我的“Windows10 Home”Maven 存储库?因此,(新)下载的数量很少。我的开发环境:我使用 Docker 快速入门终端,因此使用 docker-machine。
这是我的 docker-compose.yml 文件的一部分:
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
Run Code Online (Sandbox Code Playgroud)
我的 Dockerfile 是:
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"]
Run Code Online (Sandbox Code Playgroud)
@Jack Gore - 非常感谢你给我指路。我看过那个帖子,但还没有明确的答案。在深入研究所有单独的答案之后,这些信息为我提供了症状的答案以及如何解决类似问题的见解。
解答:通过 Dockerfile,您可以通过 1 个或多个后续镜像层构建最终镜像。为防止该步骤每次都重新下载依赖项,您可以为依赖项的“下载世界”创建一个镜像层。只有在 pom.xml 文件中的依赖项更改时才会重新下载。
为此,您将 Dockerfile 拆分为 2 个构建步骤:首先复制 pom.xml 文件并构建它。这将创建一个具有所有依赖项的图像层。第二步是构建应用程序。
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"]
Run Code Online (Sandbox Code Playgroud)
然后你会得到以下构建场景:
分离图像层的影响通过一些非常短的视频来展示。
这种构建方式的缺点当然是最终(生产)图像包含的不仅仅是应用程序。里面不仅有 JAR,还有一些依赖。
如何解决这个图像太大:
就我而言,这是可能的最佳选择。您可以自动化该过程并保持较低的图像大小。
| 归档时间: |
|
| 查看次数: |
13690 次 |
| 最近记录: |