springboot項目docker分層構(gòu)建的配置方式
一、需求場景
在使用dockerfile構(gòu)建springboot項目時,速度較慢,用時比較長,為了加快構(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"]這個Dockerfile使用了分層構(gòu)建的方法來構(gòu)建一個Spring Boot應(yīng)用的Docker鏡像,目的是加速增量構(gòu)建過程。以下是Dockerfile的解釋和一些可能的優(yōu)化建議:
分層構(gòu)建解釋
基礎(chǔ)鏡像:這個Dockerfile定義了兩個階段的構(gòu)建過程,都使用了相同的基礎(chǔ)鏡像reg.harborXXX.com/library/openjdk:8-ub。這個鏡像基于OpenJDK 8。
第一階段:構(gòu)建階段 (as builder):在這個階段,它首先設(shè)置工作目錄為/app,然后復(fù)制Jar包到/app目錄并重命名為app.jar。接著,它使用Spring Boot的layertools來提取Jar包中的層(layer),然后刪除app.jar文件。
第二階段:最終鏡像:在這個階段,它再次設(shè)置工作目錄為/app,并從構(gòu)建階段復(fù)制不同的層到當(dāng)前工作目錄。通過這種方式,可以在代碼或依賴變更時只重新構(gòu)建變更的層,從而加速構(gòu)建過程。
環(huán)境變量和時區(qū)設(shè)置:設(shè)置時區(qū)為Asia/Shanghai,并配置Java虛擬機選項JAVA_OPTS。
端口和入口點:暴露9091端口,并設(shè)置容器啟動時的入口點為運行Spring Boot應(yīng)用的命令。
到此這篇關(guān)于springboot項目docker分層構(gòu)建的文章就介紹到這了,更多相關(guān)springboot項目docker分層構(gòu)建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis-Plus數(shù)據(jù)權(quán)限插件的簡單使用
在MyBatis-Plus中,通過DataPermissionInterceptor插件實現(xiàn)數(shù)據(jù)權(quán)限控制,首先需要創(chuàng)建自定義注解和處理類,利用JSQLParser庫動態(tài)修改SQL,實現(xiàn)按角色權(quán)限過濾數(shù)據(jù),配置類中注冊攔截器,確保只有授權(quán)用戶能訪問指定數(shù)據(jù),感興趣的可以了解一下2024-10-10
Java注解中@Component和@Bean的區(qū)別
這篇文章主要介紹了@Component和@Bean的區(qū)別,在這給大家簡單介紹下作用對象不同:@Component 注解作用于類,而 @Bean 注解作用于方法,具體實例代碼參考下本文2024-03-03
springboot通用分支處理超級管理員權(quán)限邏輯
這篇文章主要為大家介紹了springboot通用分支處理超級管理員的權(quán)限邏輯,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
示例解析java重載Overloading與覆蓋Overriding
這篇文章主要介紹了java重載Overloading與覆蓋Overriding的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
Java并發(fā)編程中的ReentrantLock類詳解
這篇文章主要介紹了Java并發(fā)編程中的ReentrantLock類詳解,ReentrantLock是juc.locks包中的一個獨占式可重入鎖,相比synchronized,它可以創(chuàng)建多個條件等待隊列,還支持公平/非公平鎖、可中斷、超時、輪詢等特性,需要的朋友可以參考下2023-12-12
Spring?boot自定義加密解密數(shù)據(jù)庫連接配置示例代碼
在Spring Boot項目中,為了保護數(shù)據(jù)庫連接信息的安全,通常需要對敏感信息進行加密,這篇文章主要介紹了Spring?boot自定義加密解密數(shù)據(jù)庫連接配置的相關(guān)資料,需要的朋友可以參考下2026-05-05

