Jenkins运维之路(容器项目的优化)

104 阅读2分钟

前面在容器化的过程中是在主机打包,然后使用Dockerfile将打包的内容进行从新构建,得到项目容器来进行部署,虽然能正常部署使用,但是总感觉项目镜像有些大,所以决定进行瘦身。瘦身过程大体如下。

  • • 构建工具容器化(可以配合多段构建)。
  • • 使用多段构建(有效的减小了项目体积)。
  • • JDK运行环境改为JRE(多段构建最后运行应用的镜像不必使用jdk,如果还不知道jdk和jre有什么区别,到网上查)。

1.构建CICD工具容器

注意maven的配置你自己根据你自己的情况修改,比如使用阿里云还是私服。

# 构建目录结构
root@ubuntu2204test99:~/cicd_images/cicd_jdk21_go_mvn3911_node22_sonarq5_docker284# tree -L 1
.
├── docker
├── Dockerfile
├── go
├── jdk-21.0.8
├── maven-3.9.11
├── node-v22.19.0
└── sonar-scanner-5.0.2.4997

# Dockerfile文件

# 我使用自己的私服镜像进行构建
FROM harbor.xxxxxx.top/devops/cicd-ubuntu2404-base:v1

# 安装 Git 并清理缓存
RUN apt-get update && \
    apt-get install -y git && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY go /usr/local/go
COPY jdk-21.0.8 /usr/local/jdk-21.0.8
COPY maven-3.9.11 /usr/local/maven-3.9.11
COPY node-v22.19.0 /usr/local/node-v22.19.0
COPY sonar-scanner-5.0.2.4997 /usr/local/sonar-scanner-5.0.2.4997
COPY docker/docker /usr/bin/docker

# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk-21.0.8
ENV SCANNER_HOME=/usr/local/sonar-scanner-5.0.2.4997
ENV MAVEN_HOME=/usr/local/maven-3.9.11
ENV NODE_HOME=/usr/local/node-v22.19.0
ENV GO_HOME=/usr/local/go

# 更新 PATH 和 CLASSPATH
ENV PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:$NODE_HOME/bin:$GO_HOME/bin:$SCANNER_HOME/bin
ENV CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV NODE_OPTIONS=--max_old_space_size=2048

# 设置 Go 和 npm 的国内源
RUN go env -w GO111MODULE=on && \
    go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct && \
    npm config set registry http://mirrors.cloud.tencent.com/npm/

# 使用 bash 启动容器
CMD ["/bin/bash"]

2. 更新Dockerfile进行多段构建

FROM harbor.xxxxxx.top/devops/cicd-ubuntu2404-base:v1 AS builder
WORKDIR /build
COPY . .
RUN mvn clean package -DskipTests


FROM harbor.xxxxxx.top/devops/ubuntu/jre:21-24.04
WORKDIR /app
COPY --from=builder /build/target/spring-boot-3-hello-world-1.0.0-SNAPSHOT.jar /app/spring-boot-3-hello-world-1.0.0-SNAPSHOT.jar
ENTRYPOINT ["java""-jar""spring-boot-3-hello-world-1.0.0-SNAPSHOT.jar"]

3.效果

构建后容器容量由原来的460M左右缩减到170M,这个大小就比较合理了

111111111111.png

image-20250917094738845