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
posted @ 2023-06-05 14:24  vx_guanchaoguo0  阅读(22)  评论(0编辑  收藏  举报