背景 每次通過 docker build 'xxx' 的時候,總是會去maven鏡像下載一大堆Jar包,平均每次build都要在3分鐘左右,效率非常低下,於是查閱了各種辦法試圖讓第一次構建的時候才下載jar包,後面的構建都能復用,類似於本地開發代碼會指定maven倉庫一樣 實現方案 使用 -Dmav ...
背景
每次通過 docker build 'xxx' 的時候,總是會去maven鏡像下載一大堆Jar包,平均每次build都要在3分鐘左右,效率非常低下,於是查閱了各種辦法試圖讓第一次構建的時候才下載jar包,後面的構建都能復用,類似於本地開發代碼會指定maven倉庫一樣
實現方案
使用 -Dmaven.repo.local 來顯示指定本地 maven 倉庫目錄,復用了依賴包緩存,耗時降低了 91%
FROM maven:3.8.3-openjdk-11 AS MAVEN_BUILD COPY settings.xml /usr/share/maven/conf/settings.xml # 將工作目錄置於 /build WORKDIR /build # 定義項目地址, 允許用戶傳入參數 ARG project_url="./" # 將項目中的所有文件添加到 /build 目錄中 ADD ./$project_url /build/ #緩存maven倉庫 RUN mvn install -Dmaven.test.skip=true -Dmaven.repo.local=./.m2 # debug RUN ls -l # 構建打包 RUN mvn -Dmaven.repo.local=./.m2 install -Dmaven.test.skip=true -P prod # debug RUN ls -l FROM openjdk:11 COPY --from=MAVEN_BUILD /build/xxxxxx/target/xxx.jar /xxx.jar RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone EXPOSE 8086 #運維傳入配置解密秘鑰 ENV JASYPT_PASSWORD="" # 執行命令 ENTRYPOINT ["java","-jar","gitee-education.jar","--jasypt.encryptor.password=${JASYPT_PASSWORD}"]