Docker build时缓存maven依赖
程序员文章站
2024-03-12 22:12:14
...
现阶段所有的项目,都采用docker进行编译打包了,这样可以不用在CI/CD服务器上安装一堆的环境,也能够保证test,staging,production等环境的打包结果保持完全一致。
在用maven给java项目打包过程中,最初是用maven镜像进行编译,然后再把编译产出物复制出来,进行第二步的docker镜像打包,这样比较麻烦,而且有时会有问题,例如第一步编译失败,产生的临时文件owner 还是root,重新编译时候,CI/CD服务都没法删除这些临时文件,直接编译失败.
直到发现还有multi-stage build,一下子解决了这些问题. 在一个Dockerfile中,可以分为多个stage,后面的stage可以从前面的stage中直接复制产出物. 运用在maven打包的场景时,发现了一个问题,maven的依赖每次都要重新下载,在网上查到了一篇文章,测试后发现有效。
原理是使用dependency:go-offline
,结合docker的cache机制
FROM maven:3.6-jdk-8 AS build
COPY pom.xml /usr/src/app/pom.xml
WORKDIR /usr/src/app
RUN mvn dependency:go-offline
COPY src /usr/src/app/src
RUN mvn -f /usr/src/app/pom.xml clean package -DskipTests
FROM openjdk:8-jre-slim
ENV JAR emi-server-0.0.1-SNAPSHOT.jar
EXPOSE 8080
COPY --from=build /usr/src/app/target/*.jar /app/
WORKDIR /app
CMD java -jar /app/$JAR
下一篇: Java基于socket编程相关知识解析
推荐阅读
-
Docker build时缓存maven依赖
-
docker.maven.plugin插件出错:Could not acquire image ID or digest following build
-
maven-docker-build-500异常
-
maven项目打包时将依赖的jar包和项目代码分离
-
关于Maven项目build时出现No compiler is provided in this environment的处理
-
关于Maven项目build时出现No compiler is provided in this environment的处理
-
Maven项目在build时出现No compiler is provided in this environment的错误
-
Maven项目build时出现No compiler is provided in this environment的解决方法
-
关于Maven项目build时出现No compiler is provided in this environment的处理
-
maven项目build时出现 No compiler is provided in this environment.错误