kettle web springboot mvn dockerfile 多阶段构建
由于 gitlab 限制了上传大小
- 只能使用 dockerfile 构建jar
- 在docker build 中打包
直接构建
- 容器内部存在 java 源码 容易泄露
- 使用多阶段构建 构建出jar会后丢弃基础镜像
mvnw 使用mvn
- 固定版本
- 在不存在mvn下会自动安装mavn
依赖jar 放入项目
- 可以直接不需要在线下载 每次下载时间30min+
添加 mvnw
mvn -N io.takari:maven:wrapper
设置加速镜像
- 在执行上一步后 会有 .mvn文件夹
echo "-Dmaven.repo.local=.m2" >>maven.config
设置加速镜像
cat << EOF > setting.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
</settings>
EOF
将依赖加入项目下的.m2
- 执行 ./mvnw -f pom.xml package
注意~!!!!
- 在docker 内部构建不可以一定加参数 B
- 默认是交互式构建 会一直等待输入 看到就是镜像一直卡主~~~~
- 如果使用 ./mvnw -f pom.xml package 会永远卡主
使用新的引擎构建了可以利用新的缓存
RUN ./mvnw -B dependency:go-offline
使用 BuildKit 构建
- 自动垃圾收集
- 并发依赖解析
- 高效的指令缓存
- 构建缓存导入/导出
DOCKER_BUILDKIT=1 docker build .
可以使用缓存和构建
RUN --mount=type=cache,target=/root/.m2,rw ./mvnw -B package
dcokerfile 内部多阶段构建
FROM openjdk:8-jdk-alpine as TEMP_BUILD_IMAGE
RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk update && \
apk add --no-cache bash curl wget && \
apk add --no-cache maven && \
mkdir -p /root/.m2/repository
WORKDIR /app
COPY src src
COPY pom.xml pom.xml
RUN mvn -f pom.xml dependency:resolve
RUN mvn -B package
FROM openjdk:8
WORKDIR /app/
COPY --from=TEMP_BUILD_IMAGE /app/target/dataExChangePlatform-0.0.1-SNAPSHOT.jar .
EXPOSE 8000
ENTRYPOINT ["java","-jar","dataExChangePlatform-0.0.1-SNAPSHOT.jar"]
CMD ["-Duser.timezone=Asia/Shanghai","-Dspring.profiles.active=prod"]
docker-compose.yml
version: '3'
services:
spring-boot-application:
container_name: spring-boot-application
build:
context: .
dockerfile: Dockerfile
privileged: true
ports:
- "8000:8000"
禁用缓存构建
- 修改了 Dockerfile 文件中的指令
- docker build --no-cache .
- docker-compose
build:
context: .
no-cache: true
启动项目
java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.9.0.jar
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/17457687.html