使用 docker 的 multi stage build Java 镜像, 太慢了, 怎么破?

2021-05-20 16:40:27 +08:00
 asanelder

docker file 如下

FROM maven:3-openjdk-8 AS build

ENV PROJECT_HOME="/projects"

RUN mkdir $PROJECT_HOME
COPY . $PROJECT_HOME
WORKDIR $PROJECT_HOME
RUN mvn clean package

FROM openjdk:8-jre-alpine AS package

ENV APP_HOME="/app"
ENV JAR_NAME="demo-1.0-SNAPSHOT.jar"

RUN mkdir $APP_HOME
COPY --from=build /projects/target/$JAR_NAME $APP_HOME
WORKDIR $PROJECT_HOME

CMD java -jar $APP_JAR_NAME

现在问题是, 每次 build image 时, mvn clean package 无法使用本机.m2 中的缓存, 都要重新下载一遍依赖, 怎么破?

1250 次点击
所在节点    Docker
8 条回复
Yechs
2021-05-20 16:44:55 +08:00
你这没利用到 docker 的缓存,当然很慢了
momocraft
2021-05-20 16:48:06 +08:00
在 docker 外面打包好 (有 ci cache)

复制进 jre 镜像然后解压
Yechs
2021-05-20 16:49:01 +08:00
先 add pom.xml
然后运行 mvn install
再 add src 编译
zliea
2021-05-20 16:51:56 +08:00
把.m2 路径统一挂载宿主机
napsterwu
2021-05-20 16:53:05 +08:00
1. 外面打包好 jar 2. 把.m2 和整个 target 挂载进去
asanelder
2021-05-20 18:46:25 +08:00
@ztechstack #4
@napsterwu #5

俺想了解的就是 docker build 时, 怎么挂载宿主机的一个目录, 供 build 阶段使用, 好像做不到吧. (run 阶段可以)

@momocraft #2 现在的需求就是使用一个容器来打包 jar

@Yechs #3 没太明白啊, 老哥
asanelder
2021-05-20 21:06:13 +08:00
@Yechs #3 嗯, 现在明白了, 顺序很重要....
Yechs
2021-05-21 12:39:03 +08:00
docker 每一步都有缓存的, 文件没变化的话就使用缓存, 变化了后面就重新执行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX