Docker Maven打包緩存Jar包方案

背景:

  Docker每次build都會重新生成一個鏡像,導致每次執行maven構建會重複下載jar包,一般一個spring boot 單體應用光是Jar包都有50M起步,假設網絡延遲比較大一個鏡像打包起碼要5分鐘起步,於是經過實驗總結出2套方案,可以很好的避免每次構建鏡像重複下載Jar包問題

方案一

 1.先新建一份DockerFile_Base 基礎鏡像

# 拉取編譯環境
FROM maven:3.8.1 as builder
# 將源碼拷貝到固定目錄
COPY . /repository
# 切換到源碼目錄
WORKDIR /repository
COPY settings.xml /root/.m2/settings.xml
# 使用maven進行編譯
RUN mvn clean package -DskipTests
RUN rm -rf /repository

2.在服務器上執行build,讓jar包提前下載到maven倉庫

docker build -t='maven-base:latest.

3.依賴的Maven服務模塊DockerFile腳本依賴Base鏡像

# 拉取編譯環境
FROM maven-base:latest as builder
# 將源碼拷貝到固定目錄
COPY . /repository
# 切換到源碼目錄
WORKDIR /repository
COPY settings.xml /root/.m2/settings.xml
# 使用maven進行編譯
ARG EVN_NAME=dev
RUN mvn clean package -pl consumer -am -amd -DskipTests -P ${EVN_NAME}

# 拉取運行環境鏡像
FROM openjdk:11.0.16
VOLUME /tmp
COPY --from=builder /repository/consumer/target/app /app
WORKDIR /app/bin
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8090
RUN rm -rf /repository
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","-Xms4g", "-Xmx4g", "-XX:+UseG1GC","xxx.jar"]

 

方案二

  不依賴於方案一的Docker Base,通過-Dmaven.repo.local 指定Jar包路徑

#緩存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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章