发布于2026-07-17 阅读(0)
扫一扫,手机访问
Spring Boot 与 Docker 的集成,如今几乎成了现代应用部署的标配。Docker 提供的轻量级容器化方案,让应用的部署和管理变得异常简单和可靠。对于 Spring Boot 开发者来说,合理利用 Docker,不仅能提升部署的一致性,还能让应用的可移植性上一个大台阶。下面,我们就来系统地梳理一下这套集成的最佳实践。

在 Spring Boot 项目的根目录,创建一个 Dockerfile 文件,内容如下:
FROM openjdk:11-jre-slim WORKDIR /app COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["ja va", "-jar", "app.jar"]
用 docker build 命令来构建镜像:
docker build -t spring-boot-app .
构建完成后,用 docker run 命令启动容器:
docker run -p 8080:8080 spring-boot-app
多阶段构建能有效减小镜像体积,把构建和运行环境分开:
# 构建阶段 FROM ma ven:3.8.5-openjdk-11 AS build WORKDIR /app COPY . . RUN mvn clean package -DskipTests # 运行阶段 FROM openjdk:11-jre-slim WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["ja va", "-jar", "app.jar"]
当需要管理多个容器时,Docker Compose 是很好的选择:
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
ports:
- "3306:3306"
在 Docker Compose 中配置环境变量,让应用和数据库连接起来:
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/test
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=root
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
ports:
- "3306:3306"
为容器增加健康检查,确保应用运行正常:
FROM openjdk:11-jre-slim WORKDIR /app COPY target/*.jar app.jar EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/actuator/health || exit 1 ENTRYPOINT ["ja va", "-jar", "app.jar"]
alpine 或 slim 版本,能显著减小镜像体积。Dockerfile:
FROM openjdk:11-jre-slim WORKDIR /app COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["ja va", "-jar", "app.jar"]
# 构建镜像 docker build -t spring-boot-app . # 运行容器 docker run -p 8080:8080 spring-boot-app
docker-compose.yml:
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/test
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=root
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
# 构建并启动容器 docker-compose up --build # 停止容器 docker-compose down
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-app
spec:
replicas: 3
selector:
matchLabels:
app: spring-boot-app
template:
metadata:
labels:
app: spring-boot-app
spec:
containers:
- name: spring-boot-app
image: spring-boot-app:latest
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_URL
value: jdbc:mysql://mysql:3306/test
- name: SPRING_DATASOURCE_USERNAME
value: root
- name: SPRING_DATASOURCE_PASSWORD
value: root
---
apiVersion: v1
kind: Service
metadata:
name: spring-boot-app
spec:
selector:
app: spring-boot-app
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
# 部署应用 kubectl apply -f deployment.yaml # 查看部署状态 kubectl get deployments # 查看服务状态 kubectl get services
问题:镜像体积过大,拖慢部署速度,占用存储。
解决方案:
问题:容器启动后立即退出,无法正常运行。
解决方案:
问题:应用无法连接到数据库。
解决方案:
问题:容器运行起来后,性能达不到预期。
解决方案:
Spring Boot 与 Docker 的集成,是云原生应用的重要基石。未来,这个方向会更加注重:
容器编排技术也在持续演进,未来会关注:
Spring Boot 与 Docker 的集成,已经成为现代应用部署的主流趋势,它提供了一种简单、可靠且一致的方式。在实际项目中,需要根据具体的业务需求和系统特点,灵活配置和使用 Docker,才能真正提升部署的效率和可靠性。
容器化不是银弹,它只是一种工具。选择什么样的部署方式,最终还是得看具体的场景。无论采用哪种方式,保持配置的简洁和可维护性,才是关键。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8