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)文章
利用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)紅色波浪線問題解決方法
本文介紹了在Springboot項目中,當(dāng)@ConfigurationProperties注解出現(xiàn)紅色波浪線時的解決方法,文中有詳細的解決方案供大家參考,需要的朋友可以參考下2024-09-09
Spring security實現(xiàn)記住我下次自動登錄功能過程詳解
這篇文章主要介紹了Spring security實現(xiàn)記住我下次自動登錄功能過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03
SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放
FFmpeg是一個開源跨平臺的多媒體處理工具套件,它支持音頻、視頻文件的編碼、解碼、流媒體傳輸以及轉(zhuǎn)換等多種操作,本文小編給大家介紹了SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放的操作,需要的朋友可以參考下2024-08-08

