最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot打包docker的多種方法實(shí)現(xiàn)

 更新時(shí)間:2025年12月09日 09:47:39   作者:猩火燎猿  
本文介紹了SpringBoot項(xiàng)目打包為Docker鏡像的多種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、Spring Boot 打包 Docker 鏡像的常用方法

方法一:傳統(tǒng) Dockerfile 構(gòu)建

1. 先打包 jar

mvn clean package -DskipTests

會(huì)生成 target/demo-0.0.1-SNAPSHOT.jar。

2. 編寫(xiě) Dockerfile

在項(xiàng)目根目錄新建 Dockerfile,內(nèi)容如下:

# 選擇基礎(chǔ)鏡像
FROM openjdk:17-jdk-alpine
# 設(shè)置工作目錄
WORKDIR /app
# 復(fù)制 jar 包到容器
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口
EXPOSE 8080
# 啟動(dòng)應(yīng)用
ENTRYPOINT ["java", "-jar", "app.jar"]

3. 構(gòu)建鏡像

docker build -t my-springboot-app:1.0 .

4. 運(yùn)行容器

docker run -d -p 8080:8080 my-springboot-app:1.0

方法二:使用 Spring Boot 2.3+ 內(nèi)置的 buildpack

Spring Boot 2.3+ 內(nèi)置了 Cloud Native Buildpacks 支持,無(wú)需寫(xiě) Dockerfile。

1. 直接打鏡像

./mvnw spring-boot:build-image -DskipTests
# 或
mvn spring-boot:build-image -DskipTests

2. 運(yùn)行鏡像

docker run -d -p 8080:8080 demo:0.0.1-SNAPSHOT

優(yōu)點(diǎn): 自動(dòng)選擇合適的基礎(chǔ)鏡像、JDK 版本,鏡像安全、體積優(yōu)化。

方法三:多階段構(gòu)建(推薦生產(chǎn))

多階段構(gòu)建可極大減少鏡像體積,提升安全性。

# 第一階段:構(gòu)建 jar
FROM maven:3.9.6-eclipse-temurin-17 AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

# 第二階段:運(yùn)行 jar
FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY --from=build /app/target/demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

構(gòu)建命令同上。

二、常用 Dockerfile 優(yōu)化建議

  • 指定 JVM 參數(shù):生產(chǎn)環(huán)境可加 -Xms512m -Xmx1024m 控制內(nèi)存。
  • 時(shí)區(qū)設(shè)置
    ENV TZ=Asia/Shanghai
  • 健康檢查(Docker 17+ 支持):
    HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \
      CMD curl -f http://localhost:8080/actuator/health || exit 1
  • 非 root 用戶(hù)運(yùn)行(安全):
    RUN addgroup -S spring && adduser -S spring -G spring
    USER spring:spring

三、常見(jiàn)問(wèn)題與排查

問(wèn)題解決辦法
容器起不來(lái)/端口訪問(wèn)不到檢查 Dockerfile 的 EXPOSE 和 docker run -p 配置
jar 路徑不對(duì)COPY 路徑與 jar 包名需對(duì)應(yīng)
時(shí)區(qū)不對(duì)ENV TZ=Asia/Shanghai
配置文件未生效掛載配置目錄或用 -Dspring.config.location
日志丟失用 docker logs 查看,或配置日志輸出到控制臺(tái)

四、最佳實(shí)踐

  • 鏡像小巧:用 openjdk:17-jdk-alpine,避免用大體積的基礎(chǔ)鏡像。
  • 多階段構(gòu)建:生產(chǎn)環(huán)境推薦,減少最終鏡像體積。
  • 配置分離:用掛載、環(huán)境變量、K8s ConfigMap 管理配置。
  • 安全運(yùn)行:非 root 用戶(hù)啟動(dòng),減少安全風(fēng)險(xiǎn)。
  • 自動(dòng)化構(gòu)建:結(jié)合 CI/CD(如 GitHub Actions、Jenkins、GitLab CI)自動(dòng)構(gòu)建和推送鏡像。

五、Spring Boot + Dockerfile 完整示例

Dockerfile:

FROM openjdk:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENV JAVA_OPTS=""
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
EXPOSE 8080

構(gòu)建命令:

mvn clean package -DskipTests
docker build -t my-springboot-app:1.0 .
docker run -d -p 8080:8080 my-springboot-app:1.0

六、Spring Boot Docker 鏡像高級(jí)技巧

1. 環(huán)境變量與配置掛載

  • 環(huán)境變量注入:Spring Boot 支持通過(guò)環(huán)境變量覆蓋配置項(xiàng)。
    docker run -e SPRING_PROFILES_ACTIVE=prod -e SERVER_PORT=8081 ...
  • 掛載外部配置文件
    docker run -v /host/config/application-prod.yml:/app/application-prod.yml \
      -e SPRING_CONFIG_LOCATION=/app/application-prod.yml ...
  • 掛載日志目錄(推薦將日志輸出到掛載目錄,便于宿主機(jī)收集):
    docker run -v /host/logs:/app/logs ...

2. 健康檢查與自恢復(fù)

  • Dockerfile 中配置健康檢查,結(jié)合 Spring Boot Actuator:
    HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \
      CMD curl -f http://localhost:8080/actuator/health || exit 1
  • 容器編排平臺(tái)(如 K8s)可自動(dòng)重啟 unhealthy 容器。

3. JVM 參數(shù)優(yōu)化

  • 在 Dockerfile 或啟動(dòng)命令中注入 JVM 參數(shù),控制內(nèi)存、GC 等:
    ENV JAVA_OPTS="-Xms256m -Xmx512m"
    ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
  • 推薦用 -XX:MaxRAMPercentage=75.0 讓 JVM 動(dòng)態(tài)感知容器分配的內(nèi)存。

4. 非 root 用戶(hù)運(yùn)行

  • 提高安全性,防止容器越權(quán)操作主機(jī)資源。
    RUN addgroup -S spring && adduser -S spring -G spring
    USER spring:spring

5. 多端口暴露

  • Spring Boot 默認(rèn)只用一個(gè)端口,但如有 actuator 或管理端口,可在 Dockerfile 中暴露多個(gè)端口:
    EXPOSE 8080 8081

七、多環(huán)境(開(kāi)發(fā)/測(cè)試/生產(chǎn))鏡像管理

  • 多 profile 支持:通過(guò)環(huán)境變量或掛載配置文件切換環(huán)境。
  • 多標(biāo)簽管理:鏡像構(gòu)建時(shí)用不同 tag 區(qū)分環(huán)境。
    docker build -t my-app:dev .
    docker build -t my-app:prod .
  • CI/CD 自動(dòng)化:流水線自動(dòng)根據(jù)分支或 tag 構(gòu)建不同環(huán)境鏡像并推送到鏡像倉(cāng)庫(kù)(如 Harbor、Docker Hub)。

八、與微服務(wù)、K8s 的集成建議

1. Kubernetes 部署 Spring Boot

  • 推薦用 Deployment/StatefulSet 管理 Spring Boot 容器。

  • 配置健康檢查(readiness/liveness probe):

    livenessProbe:
      httpGet:
        path: /actuator/health
        port: 8080
      initialDelaySeconds: 30
      periodSeconds: 10
  • 用 ConfigMap/Secret 管理配置和敏感信息。

  • 用 Service 暴露端口,Ingress 做統(tǒng)一路由。

2. 服務(wù)發(fā)現(xiàn)與配置中心

  • Spring Cloud 微服務(wù)場(chǎng)景推薦結(jié)合 Nacos、Eureka、Consul 做服務(wù)發(fā)現(xiàn)。
  • 配置中心可用 Spring Cloud Config、Nacos 配置,避免鏡像內(nèi)硬編碼。

3. 日志與監(jiān)控

  • 推薦日志輸出到標(biāo)準(zhǔn)輸出(stdout),K8s 可自動(dòng)收集。
  • 集成 Prometheus、Grafana、ELK/SkyWalking 做性能監(jiān)控和鏈路追蹤。

九、常見(jiàn)容器化部署問(wèn)題深度解析

問(wèn)題原因與解決辦法
容器內(nèi)時(shí)區(qū)不對(duì)Dockerfile 設(shè)置 ENV TZ=Asia/Shanghai 或掛載宿主機(jī)時(shí)區(qū)文件
配置未生效/被覆蓋優(yōu)先級(jí):命令行參數(shù) > 環(huán)境變量 > 掛載文件 > 鏡像內(nèi)配置,建議用環(huán)境變量或掛載
內(nèi)存溢出/OOMJVM 參數(shù)未限制,建議用 -Xmx 或 MaxRAMPercentage
日志丟失/查不到日志輸出到容器內(nèi)文件,建議輸出到控制臺(tái)或掛載日志目錄
容器重啟后數(shù)據(jù)丟失容器無(wú)狀態(tài),需掛載數(shù)據(jù)卷或用外部存儲(chǔ)(如數(shù)據(jù)庫(kù)、對(duì)象存儲(chǔ))
端口沖突/無(wú)法訪問(wèn)檢查 Dockerfile 的 EXPOSE 與 docker run -p 參數(shù)是否一致

十、完整多階段 Dockerfile 高級(jí)示例

# 構(gòu)建階段
FROM maven:3.9.6-eclipse-temurin-17 AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

# 運(yùn)行階段
FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar

ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms256m -Xmx512m"
EXPOSE 8080

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s \
  CMD curl -f http://localhost:8080/actuator/health || exit 1

RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

十一、參考與擴(kuò)展閱讀

到此這篇關(guān)于Springboot打包docker的多種方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Springboot打包docker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker?部署?gitlab-ce?16.9.1的詳細(xì)過(guò)程

    docker?部署?gitlab-ce?16.9.1的詳細(xì)過(guò)程

    Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,它允許開(kāi)發(fā)者將應(yīng)用及其依賴(lài)打包到一個(gè)可移植的容器中,然后發(fā)布到任何支持Docker的Linux或Windows操作系統(tǒng)上,這篇文章主要介紹了docker?部署gitlab-ce?16.9.1的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-04-04
  • 解決Docker容器異常退出Exit(253)問(wèn)題

    解決Docker容器異常退出Exit(253)問(wèn)題

    這篇文章主要介紹了解決Docker容器異常退出Exit(253)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署

    Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署

    這篇文章主要介紹了Docker+K8S 集群環(huán)境搭建及分布式應(yīng)用部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Docker配置容器開(kāi)機(jī)自啟或服務(wù)重啟后自啟兩種常見(jiàn)方法

    Docker配置容器開(kāi)機(jī)自啟或服務(wù)重啟后自啟兩種常見(jiàn)方法

    Docker容器自啟動(dòng)是指在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)并運(yùn)行指定的Docker容器,這通常用于確保關(guān)鍵服務(wù)始終可用,無(wú)需手動(dòng)干預(yù),這篇文章主要介紹了Docker配置容器開(kāi)機(jī)自啟或服務(wù)重啟后自啟的?兩種常見(jiàn)方法,需要的朋友可以參考下
    2025-08-08
  • 容器Docker入門(mén)詳解

    容器Docker入門(mén)詳解

    這篇文章主要介紹了容器Docker入門(mén)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • docker容器使用GPU方法實(shí)現(xiàn)

    docker容器使用GPU方法實(shí)現(xiàn)

    本文主要介紹了docker容器使用GPU方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • docker?swarm快速部署redis分布式集群的詳細(xì)過(guò)程

    docker?swarm快速部署redis分布式集群的詳細(xì)過(guò)程

    這篇文章主要介紹了docker?swarm快速部署redis分布式集群,只需要通過(guò)docker-compose.yml文件和一個(gè)啟動(dòng)命令就完成redis分布式部署的方式,讓其分別部署在不同機(jī)器上,并實(shí)現(xiàn)集群搭建,需要的朋友可以參考下
    2022-10-10
  • Docker Volumn容器間共享數(shù)據(jù)的實(shí)現(xiàn)

    Docker Volumn容器間共享數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了Docker Volumn容器間共享數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • docker進(jìn)行RocketMq集群部署方式

    docker進(jìn)行RocketMq集群部署方式

    這篇文章主要介紹了docker進(jìn)行RocketMq集群部署方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用docker部署django技術(shù)棧項(xiàng)目的方法步驟

    使用docker部署django技術(shù)棧項(xiàng)目的方法步驟

    這篇文章主要介紹了使用docker部署django技術(shù)棧項(xiàng)目的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

于都县| 曲沃县| 喜德县| 大足县| 方城县| 乃东县| 西平县| 吴川市| 安徽省| 洱源县| 辉县市| 乌鲁木齐市| 荥阳市| 平定县| 日照市| 米林县| 沁水县| 崇阳县| 绍兴县| 会理县| 新野县| 肇源县| 修武县| 玉门市| 峨山| 连江县| 宝兴县| 治多县| 读书| 科尔| 乌审旗| 瑞金市| 大悟县| 秀山| 通辽市| 桂林市| 兴安县| 和龙市| 宝山区| 廊坊市| 汉源县|