maven #
docker run #
maven配置文件 #
./maven/settings.xml (主要用于配置镜像仓库地址)
xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/usr/share/maven/ref/repository</localRepository>
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Repository</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
</settings>
bash脚本 #
编译maven项目,并将编译结果放到指定的地方。
镜像用的是 maven:3-jdk-8
,后缀的 8
表示java版本。
bash
docker run --rm -it \
-v ./maven/settings.xml:/usr/share/maven/ref/settings-docker.xml \
-v ./maven/repo:/usr/share/maven/ref/repository \
-v ./erp/src/jshERP-boot:/app \
-w /app \
maven:3-jdk-8 mvn -s /usr/share/maven/ref/settings-docker.xml clean package -Dmaven.test.skip=true
if [ "$?" = 0 -a -f ./erp/src/jshERP-boot/target/jshERP.jar ]; then
mkdir -p ./erp/java
cp -f ./erp/src/jshERP-boot/target/jshERP.jar ./erp/java/jshERP.jar
fi
Dockerfile #
适用于单模块maven项目,利用docker镜像中间层来做缓存,在下一次构建时,若pom.xml无变化,则可免去重新下载依赖的过程,从而加速构建。
Dockerfile
FROM maven:3-jdk-8 AS build-jsh-erp-jar
WORKDIR /app
COPY pom.xml .
# download all dependencies
RUN mvn dependency:go-offline
COPY src ./src
# build
RUN mvn package -Dmaven.test.skip=true
FROM openjdk:8
COPY --from=build-jsh-erp-jar /app/src/target/jshERP.jar /app/jshERP.jar
WORKDIR /app
ENTRYPOINT ["java", "-jar", "/app/jshERP.jar"]
TODO:多模块maven项目,该如何有效地利用docker镜像中间层来加速下一次构建?