-
环境配置阶段1:整个后端由一个公共模块和若干个子模块组成。众所周知java项目有许多的依赖包,这些可以通过maven进行管理,因此在编译之前,首先要在纯净的容器中借助maven下载公共模块的依赖包。
# 未优化版本 FROM maven:3-openjdk-8 as basement ARG MY_HOME=/app COPY . $MY_HOME WORKDIR $MY_HOME RUN mvn clean install
- 优化1:使用带国内镜像源加速功能的基础镜像。
FROM registry.cn-hangzhou.aliyuncs.com/acs/maven as basement
- 优化2:利用镜像分层构建的特点,单独将pom.xml作为一层,起到缓存依赖的作用。
COPY pom.xml $MY_HOME RUN ["/usr/local/bin/mvn-entrypoint.sh","mvn","verify","clean","--fail-never"] COPY . $MY_HOME RUN ["/usr/local/bin/mvn-entrypoint.sh","mvn","verify"]
- 最终效果:通过该DockerFile可以构建一个公共模块的镜像
FROM registry.cn-hangzhou.aliyuncs.com/acs/maven as basement ARG MY_HOME=/app WORKDIR $MY_HOME COPY pom.xml $MY_HOME RUN ["/usr/local/bin/mvn-entrypoint.sh","mvn","verify","clean","--fail-never"] COPY . $MY_HOME RUN ["/usr/local/bin/mvn-entrypoint.sh","mvn","verify"]
-
环境配置阶段2:现在子模块可以借助公共模块的镜像继续编译子模块的代码
-
ARG
需要由外部传入 -
-P
代表使用对应的生产环境配置文件(需要自己准备)ARG IMAG_BASE_PROD FROM ${IMAGE_BASE_PROD} as builder ARG MODULE_NAME COPY . /usr/src/app/bx-core-server/${MODULE_NAME} WORKDIR /usr/src/app RUN cd /usr/src/app/bx-core-server/${MODULE_NAME} \ && mvn clean install -P docker
-
-
打包阶段:
-
使用
openjdk
运行项目FROM openjdk:8u265-jre-slim as prod ARG MODULE_NAME ENV MODULE_NAME ${MODULE_NAME} COPY --from=builder /usr/src/app/bx-core-server/${MODULE_NAME}/target/${MODULE_NAME}.jar /root/ RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone CMD java -jar -Xmx512m /root/${MODULE_NAME}.jar
-
-
其他可以参考的网址:
MINE MIND系列将在我的GitHub上实时更新,同时精选部分汇总于CSDN专栏
GitHub仓库:https://github.com/IcyLeaves/MINE-MIND
CSDN专栏:https://blog.csdn.net/qq_37398834/category_10975647.html