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

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

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

# 第二階段:運(yùn)行環(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)建和運(yùn)行

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

# 運(yùn)行容器
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 用戶(安全最佳實(shí)踐)
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)建并推送到遠(yuǎn)程倉庫
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)文章

最新評論

青浦区| 木兰县| 子长县| 襄汾县| 临沭县| 钦州市| 荔波县| 吴旗县| 施秉县| 屏山县| 蒲江县| 琼海市| 尚义县| 石家庄市| 临夏县| 南木林县| 太原市| 宁津县| 瑞安市| 佳木斯市| 重庆市| 四平市| 灯塔市| 富宁县| 崇州市| 资源县| 清流县| 清水河县| 甘孜| 洞头县| 长春市| 贺兰县| 寻甸| 罗定市| 紫金县| 巴林左旗| 游戏| 青河县| 西畴县| 徐汇区| 甘洛县|