使用docker intelligent idea构建的Spring引导开发耗时太长



我正在尝试使用docker为sprint启动应用程序设置我的开发环境。

我在用智能点子。

dockerfile.

FROM gradle:7.4.2-jdk18-alpine AS build
COPY --chown=gradle:gradle ./ /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build --no-daemon --debug
FROM openjdk:19-slim
EXPOSE 5097
EXPOSE 5005
RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/spring-boot-application.jar
ENTRYPOINT ["java", "-Xdebug", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-jar", "/app/spring-boot-application.jar"]

和docker-compose。yml:

version: '3.7'
services:
hmis-config-service:
build:
context: .
dockerfile: Dockerfile
image: 'hmis-config-service:0.0.0.1'
ports:
- "9060:5080"
- "8091:5005"
volumes:
- myapp:/home/gradle/src
environment:
db.url: 'jdbc:postgresql://host.docker.internal:5432/hms'
db.username: 'postgres'
db.password: 'pgsroot'
GRADLE_HOME: /usr/local/gradle
JAVA_HOME: /usr/lib/jvm/java
M2: /usr/local/apache-maven/bin
M2_HOME: /usr/local/apache-maven
volumes:
myapp:

每次我试图构建它,它需要很长时间,因为它下载所有gradle依赖。因此,即使是很小的变化也需要很长时间。

如果项目开始使用

docker-compose up # without the --build flag

它立即启动,但所做的更改不在容器中。

我试图挂载卷/home/gradle/src以保持依赖项同步,但没有做任何事情。

可以做些什么来改善构建时间和缓存依赖关系?

你需要在docker上下文中构建应用程序吗?如果您在外部(本地)构建它,并且只复制工件,那么您可以利用(本地)gradle守护进程的构建缓存,这应该会显著提高速度。

本质上,您是在每次构建/调用时从头构建项目。

。e,不要在Dockerfile内部构建,只复制已经构建的工件。

PS:如果您必须在docker上下文中构建(例如,如果您在本地没有JDK),您可以尝试找出gradle保持其本地缓存的位置并同步/复制它。

正如您所提到的,问题是构建需要很长时间,因为它每次都下载依赖项。

如果是这种情况,您可以尝试使用多阶段构建。

基本上你下载一次依赖项,然后每次都复制它们。这也减少了图像的大小。

引用:

  • https://docs.docker.com/develop/develop-images/multistage-build/
  • https://spring.io/guides/topicals/spring-boot-docker/
  • https://gist.github.com/msauza/6a906e879549e218c54868d81161afcb
  • https://hashedin.com/blog/a-guide-to-optimize-build-time-in-docker/

p。S:我还没有在Spring Boot应用程序上尝试过,但是它们在基于Go的应用程序上运行得很好。

相关内容

最新更新