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

springboot項目jar部署到docker的完整指南

 更新時間:2026年03月15日 09:08:21   作者:每日技術(shù)  
這篇文章主要為大家詳細介紹了springboot項目jar部署到docker的完整指南,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、基礎(chǔ) Dockerfile 方式

1. 準(zhǔn)備 Spring Boot 項目

確保 pom.xml中打包方式為 jar:

<packaging>jar</packaging>

2. 創(chuàng)建 Dockerfile

在項目根目錄創(chuàng)建 Dockerfile(無后綴):

# 第一階段:構(gòu)建應(yīng)用
FROM maven:3.8.6-openjdk-11 AS builder

WORKDIR /app

# 復(fù)制 pom.xml 并下載依賴(利用緩存)
COPY pom.xml .
RUN mvn dependency:go-offline

# 復(fù)制源代碼并打包
COPY src ./src
RUN mvn package -DskipTests

# 第二階段:運行環(huán)境
FROM openjdk:11-jre-slim

WORKDIR /app

# 從構(gòu)建階段復(fù)制 jar 文件
COPY --from=builder /app/target/*.jar app.jar

# 暴露端口(Spring Boot 默認(rèn) 8080)
EXPOSE 8080

# 啟動命令
ENTRYPOINT ["java", "-jar", "app.jar"]

3. 構(gòu)建和運行

# 構(gòu)建鏡像
docker build -t my-spring-app .

# 運行容器
docker run -d -p 8080:8080 --name spring-app my-spring-app

# 查看日志
docker logs -f spring-app

二、優(yōu)化版 Dockerfile(生產(chǎn)推薦)

# 使用更小的基礎(chǔ)鏡像
FROM eclipse-temurin:17-jre-alpine AS runtime

# 設(shè)置環(huán)境變量
ENV SPRING_PROFILES_ACTIVE=prod \
    JAVA_OPTS="-Xms512m -Xmx1024m"

# 創(chuàng)建非 root 用戶(安全最佳實踐)
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring

# 設(shè)置工作目錄
WORKDIR /app

# 只復(fù)制 jar 文件(減少層大小)
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar

# 健康檢查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1

EXPOSE 8080

ENTRYPOINT exec java $JAVA_OPTS -jar app.jar

三、使用 Docker Compose 部署

docker-compose.yml

version: '3.8'
services:
  spring-app:
    build: .
    container_name: spring-boot-app
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - JAVA_OPTS=-Xms512m -Xmx1024m
    volumes:
      # 日志持久化
      - ./logs:/app/logs
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped
  # 可選:添加數(shù)據(jù)庫
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: mydb
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
    restart: unless-stopped
volumes:
  mysql-data:

常用命令

# 構(gòu)建并啟動
docker-compose up -d --build

# 查看狀態(tài)
docker-compose ps

# 查看日志
docker-compose logs -f spring-app

# 停止服務(wù)
docker-compose down

# 停止并刪除數(shù)據(jù)卷
docker-compose down -v

四、使用 Jib 插件(無需 Dockerfile)

Maven 配置 (pom.xml)

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.3.2</version>
    <configuration>
        <from>
            <image>eclipse-temurin:17-jre-alpine</image>
        </from>
        <to>
            <image>my-registry/my-spring-app:${project.version}</image>
        </to>
        <container>
            <mainClass>com.example.demo.DemoApplication</mainClass>
            <ports>
                <port>8080</port>
            </ports>
            <environment>
                <SPRING_PROFILES_ACTIVE>prod</SPRING_PROFILES_ACTIVE>
            </environment>
        </container>
    </configuration>
</plugin>

構(gòu)建命令

# 構(gòu)建并推送到遠程倉庫
mvn compile jib:build

# 構(gòu)建本地 Docker 鏡像
mvn compile jib:dockerBuild

五、Kubernetes 部署示例

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: spring-app
  template:
    metadata:
      labels:
        app: spring-app
    spec:
      containers:
      - name: spring-app
        image: my-registry/my-spring-app:latest
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "k8s"
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "1000m"
        livenessProbe:
          httpGet:
            path: /actuator/health/liveness
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health/readiness
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: spring-app-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: spring-app

六、常見問題解決

問題解決方案
時區(qū)不正確在 Dockerfile 中添加 ENV TZ=Asia/Shanghai并安裝 tzdata
中文亂碼添加 JVM 參數(shù) -Dfile.encoding=UTF-8
配置文件不生效使用 docker cp復(fù)制配置文件或掛載 volume
內(nèi)存占用過高調(diào)整 JAVA_OPTS,使用 -XX:+UseContainerSupport

到此這篇關(guān)于springboot項目jar部署到docker的完整指南的文章就介紹到這了,更多相關(guān)springboot jar部署docker內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    詳解JAVA調(diào)用WCF服務(wù)的示例代碼

    這篇文章主要介紹了詳解JAVA調(diào)用WCF服務(wù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 利用SpringBoot實現(xiàn)高效的文件分塊上傳方案

    利用SpringBoot實現(xiàn)高效的文件分塊上傳方案

    在互聯(lián)網(wǎng)應(yīng)用中,大文件上傳是一個常見而棘手的挑戰(zhàn),傳統(tǒng)的單文件上傳方式在面對大文件時經(jīng)常面臨超時、內(nèi)存溢出等問題,本文將深入探討如何利用Spring Boot實現(xiàn)高效的分塊上傳方案,解決大文件傳輸痛點,需要的朋友可以參考下
    2025-06-06
  • @ConfigurationProperties在IDEA中出現(xiàn)紅色波浪線問題解決方法

    @ConfigurationProperties在IDEA中出現(xiàn)紅色波浪線問題解決方法

    本文介紹了在Springboot項目中,當(dāng)@ConfigurationProperties注解出現(xiàn)紅色波浪線時的解決方法,文中有詳細的解決方案供大家參考,需要的朋友可以參考下
    2024-09-09
  • Spring security實現(xiàn)記住我下次自動登錄功能過程詳解

    Spring security實現(xiàn)記住我下次自動登錄功能過程詳解

    這篇文章主要介紹了Spring security實現(xiàn)記住我下次自動登錄功能過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java如何使用流去除集合中某個字段為空的對象

    Java如何使用流去除集合中某個字段為空的對象

    這篇文章主要給大家介紹了關(guān)于Java如何使用流去除集合中某個字段為空的對象,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-08-08
  • SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放

    SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放

    FFmpeg是一個開源跨平臺的多媒體處理工具套件,它支持音頻、視頻文件的編碼、解碼、流媒體傳輸以及轉(zhuǎn)換等多種操作,本文小編給大家介紹了SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放的操作,需要的朋友可以參考下
    2024-08-08
  • mybatis 加載配置文件的方法(兩種方式)

    mybatis 加載配置文件的方法(兩種方式)

    這篇文章主要介紹了mybatis 加載配置文件的方法,通過實例代碼給大家介紹了mybatis 加載配置文件的兩種方式,需要的朋友可以參考下
    2017-12-12
  • Java生成含字母和數(shù)字的6位隨機字符串

    Java生成含字母和數(shù)字的6位隨機字符串

    這篇文章主要為大家詳細介紹了Java生成含字母和數(shù)字的6位隨機字符串的相關(guān)資料,供大家參考,感興趣的朋友可以參考一下
    2016-05-05
  • 手把手教你SpringBoot整合Mybatis

    手把手教你SpringBoot整合Mybatis

    這篇文章主要介紹了手把手教你SpringBoot整合Mybatis,Mybatis是一款持久化框架,可以幫我們省去大部分jdbc的代碼,需要的朋友可以參考下
    2023-03-03
  • Java自動添加重寫的toString方法詳解

    Java自動添加重寫的toString方法詳解

    在本篇文章里小編給大家整理了關(guān)于Java自動添加重寫的toString方法總結(jié),需要的朋友們學(xué)習(xí)下。
    2019-07-07

最新評論

井冈山市| 浑源县| 昌都县| 阳谷县| 抚顺市| 师宗县| 上饶市| 郎溪县| 郎溪县| 积石山| 富蕴县| 沁水县| 绥化市| 丰镇市| 福泉市| 福泉市| 法库县| 蒲城县| 南江县| 玛沁县| 揭阳市| 北辰区| 兴仁县| 长岭县| 富源县| 西充县| 石家庄市| 昭觉县| 和静县| 遵化市| 襄垣县| 拜城县| 永吉县| 长丰县| 郑州市| 柳州市| 玛多县| 攀枝花市| 大足县| 永寿县| 筠连县|