springboot項(xiàng)目docker分層構(gòu)建的配置方式
一、需求場(chǎng)景
在使用dockerfile構(gòu)建springboot項(xiàng)目時(shí),速度較慢,用時(shí)比較長,為了加快構(gòu)建docker鏡像的速度,采用分層構(gòu)建的方式
二、構(gòu)建配置
1、pom.xml配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <docker.plugin.version>0.43.4</docker.plugin.version> <docker.registry>reg.harborXXX.com</docker.registry> <docker.namespace>order</docker.namespace> </properties> <build> <finalName>order-xxx</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.plugin.version}</version> <configuration> <registry>${docker.registry}</registry> <images> <image> <name>${docker.registry}/${docker.namespace}/${project.build.finalName}:${project.version}</name> <build> <dockerFileDir>${project.basedir}</dockerFileDir> </build> </image> </images> </configuration> </plugin> </plugins> </build>
2、Dockerfile
reg.harborXXX.com為自建harbor私服地址
自建私服參考:Docker倉庫管理鏡像 – 公共倉庫【Docker Hub】和私人倉庫【Registry】和【harbor】
# 分層構(gòu)建, 加速增量構(gòu)建 # 需配置host:{IP} reg.harborXXX.com FROM reg.harborXXX.com/library/openjdk:8-ub as builder WORKDIR app ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar FROM reg.harborXXX.com/library/openjdk:8-ub ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV JAVA_OPTS=" -server -Xmx1024m -Xms256m -Xmn512m -Xss256k" WORKDIR app COPY --from=builder /app/dependencies/ ./ COPY --from=builder /app/spring-boot-loader/ ./ COPY --from=builder /app/snapshot-dependencies/ ./ COPY --from=builder /app/application/ ./ EXPOSE 9091 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.JarLauncher"]
這個(gè)Dockerfile使用了分層構(gòu)建的方法來構(gòu)建一個(gè)Spring Boot應(yīng)用的Docker鏡像,目的是加速增量構(gòu)建過程。以下是Dockerfile
的解釋和一些可能的優(yōu)化建議:
分層構(gòu)建解釋
基礎(chǔ)鏡像:這個(gè)Dockerfile
定義了兩個(gè)階段的構(gòu)建過程,都使用了相同的基礎(chǔ)鏡像reg.harborXXX.com/library/openjdk:8-ub
。這個(gè)鏡像基于OpenJDK 8
。
第一階段:構(gòu)建階段 (as builder
):在這個(gè)階段,它首先設(shè)置工作目錄為/app
,然后復(fù)制Jar
包到/app
目錄并重命名為app.jar
。接著,它使用Spring Boot
的layertools
來提取Jar
包中的層(layer
),然后刪除app.jar
文件。
第二階段:最終鏡像:在這個(gè)階段,它再次設(shè)置工作目錄為/app
,并從構(gòu)建階段復(fù)制不同的層到當(dāng)前工作目錄。通過這種方式,可以在代碼或依賴變更時(shí)只重新構(gòu)建變更的層,從而加速構(gòu)建過程。
環(huán)境變量和時(shí)區(qū)設(shè)置:設(shè)置時(shí)區(qū)為Asia/Shanghai
,并配置Java虛擬機(jī)選項(xiàng)JAVA_OPTS
。
端口和入口點(diǎn):暴露9091
端口,并設(shè)置容器啟動(dòng)時(shí)的入口點(diǎn)為運(yùn)行Spring Boot
應(yīng)用的命令。
到此這篇關(guān)于springboot項(xiàng)目docker分層構(gòu)建的文章就介紹到這了,更多相關(guān)springboot項(xiàng)目docker分層構(gòu)建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Boot?集成?Quartz并使用Cron?表達(dá)式實(shí)現(xiàn)定時(shí)任務(wù)
本篇文章介紹了如何在?Spring?Boot?中集成?Quartz?進(jìn)行定時(shí)任務(wù)調(diào)度,并通過?Cron?表達(dá)式?控制任務(wù)執(zhí)行時(shí)間,Quartz?提供了更強(qiáng)大的任務(wù)調(diào)度能力,比?@Scheduled?注解更靈活,適用于復(fù)雜的定時(shí)任務(wù)需求2025-04-04Spring Boot應(yīng)用監(jiān)控的實(shí)戰(zhàn)教程
Spring Boot 提供運(yùn)行時(shí)的應(yīng)用監(jiān)控和管理功能,下面這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用監(jiān)控的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05