当前位置: 首页 > news >正文

Spring Boot 集成 Docker 构建与发版完整指南

Spring Boot 集成 Docker 构建与发版完整指南

  • 一、环境准备
    • 1. 安装 Docker
    • 2. 验证安装
  • 二、Spring Boot 项目配置
    • 1. 添加 Maven 插件
    • 2. 创建 Dockerfile
    • 3. 多阶段构建优化(可选)
  • 三、构建与运行
    • 1. 构建 Docker 镜像
    • 2. 运行容器
    • 3. 验证应用
  • 四、高级配置
    • 1. 使用 Docker Compose
    • 2. 集成 CI/CD(GitHub Actions 示例)
  • 五、生产环境最佳实践
    • 1. 镜像优化
    • 2. 安全加固
    • 3. 健康检查
    • 4. 日志管理
  • 六、常见问题解决
    • 1. 时区问题
    • 2. 内存限制
    • 3. 多环境配置
  • 七、Kubernetes 部署(可选)
    • 1. 创建 deployment.yaml
    • 2. 创建 service.yaml
    • 3. 部署到 Kubernetes

一、环境准备

1. 安装 Docker

  • Windows/macOS:下载 Docker Desktop
  • Linux(以Ubuntu为例):
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker

2. 验证安装

docker --version
docker-compose --version
docker run hello-world

二、Spring Boot 项目配置

1. 添加 Maven 插件

在 pom.xml 中添加 Docker 构建插件:

<build><plugins><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><executions><execution><id>default</id><goals><goal>build</goal><goal>push</goal></goals></execution></executions><configuration><repository>${docker.image.prefix}/${project.artifactId}</repository><tag>${project.version}</tag><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins>
</build>

2. 创建 Dockerfile

在项目根目录创建 Dockerfile:

# 使用 OpenJDK 官方镜像作为基础镜像
FROM openjdk:17-jdk-slim# 设置工作目录
WORKDIR /app# 复制构建好的 jar 包到容器中
ARG JAR_FILE
COPY ${JAR_FILE} app.jar# 暴露端口
EXPOSE 8080# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]

3. 多阶段构建优化(可选)

对于生产环境,推荐使用多阶段构建减小镜像体积:

# 构建阶段
FROM maven:3.8.4-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests# 运行阶段
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

三、构建与运行

1. 构建 Docker 镜像

# 先打包项目
mvn clean package# 构建 Docker 镜像
mvn dockerfile:build# 或者直接使用 docker 命令
docker build -t my-spring-app:1.0.0 .

2. 运行容器

# 运行容器
docker run -d -p 8080:8080 --name my-app my-spring-app:1.0.0# 查看运行日志
docker logs -f my-app

3. 验证应用

访问 http://localhost:8080 查看应用是否正常运行

四、高级配置

1. 使用 Docker Compose

创建 docker-compose.yml 文件:

version: '3.8'services:app:image: my-spring-app:1.0.0container_name: spring-appports:- "8080:8080"environment:- SPRING_PROFILES_ACTIVE=prodvolumes:- ./logs:/app/logsnetworks:- app-networkredis:image: redis:alpineports:- "6379:6379"networks:- app-networknetworks:app-network:driver: bridge

启动服务:

docker-compose up -d

2. 集成 CI/CD(GitHub Actions 示例)

创建 .github/workflows/docker-publish.yml:

name: Docker Build and Pushon:push:branches: [ main ]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Set up JDK 17uses: actions/setup-java@v2with:java-version: '17'distribution: 'temurin'- name: Build with Mavenrun: mvn clean package- name: Login to Docker Hubuses: docker/login-action@v1with:username: ${{ secrets.DOCKER_HUB_USERNAME }}password: ${{ secrets.DOCKER_HUB_TOKEN }}- name: Build and pushuses: docker/build-push-action@v2with:context: .push: truetags: your-dockerhub-username/my-spring-app:latest

五、生产环境最佳实践

1. 镜像优化

  • 使用 .dockerignore 文件排除不必要的文件:
.git
.mvn
target
*.iml

2. 安全加固

  • 使用非 root 用户运行:
RUN addgroup -S spring && adduser -S spring -G spring
USER spring

3. 健康检查

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

4. 日志管理

# 查看日志
docker logs my-app# 持久化日志
docker run -v /path/on/host:/app/logs my-spring-app

六、常见问题解决

1. 时区问题

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

2. 内存限制

docker run -d -m 512m --memory-swap 1G my-spring-app

3. 多环境配置

docker run -e "SPRING_PROFILES_ACTIVE=prod" my-spring-app

七、Kubernetes 部署(可选)

1. 创建 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: spring-app
spec:replicas: 3selector:matchLabels:app: spring-apptemplate:metadata:labels:app: spring-appspec:containers:- name: spring-appimage: my-spring-app:1.0.0ports:- containerPort: 8080resources:limits:memory: "512Mi"cpu: "500m"

2. 创建 service.yaml

apiVersion: v1
kind: Service
metadata:name: spring-app-service
spec:selector:app: spring-appports:- protocol: TCPport: 80targetPort: 8080type: LoadBalancer

3. 部署到 Kubernetes

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

通过以上步骤,您已经完成了 Spring Boot 项目与 Docker 的完整集成,实现了从开发到生产的全流程容器化部署。

http://www.xdnf.cn/news/1367785.html

相关文章:

  • Netty源码—性能优化和设计模式
  • (vue)el-progress左侧添加标签/名称
  • 机器视觉学习-day02-灰度化实验
  • 【云计算】云原生(Cloud Native)
  • Spark云原生流处理实战与风控应用
  • 【云原生】CentOS安装Kubernetes+Jenkins
  • 【语法】【C+V】本身常用图表类型用法快查【CSDN不支持,VSCODE可用】
  • 云计算学习笔记——Linux硬盘、硬盘划分、交换空间、自动挂载篇
  • CentOS 7服务器初始化全攻略:从基础配置到安全加固
  • Redis ZSET 深度剖析:从命令、原理到实战
  • 几种方式实现文件自动上传到服务器共享文件夹
  • NVIDIA GPU 中的 L2 Cache
  • 【Linux】Socket编程——TCP版
  • 深入OpenHarmony后台任务“黑匣子”:BackgroundTaskMgr框架全栈解析与实战避坑指南
  • Thingsboard 租户管理员权限,增加租户普通用户权限
  • 三、显示3D文字
  • PLC通讯中遇到的实际场景
  • Mamba-HoME:面向3D医学影像分割的层次化专家混合新框架
  • 自然处理语言NLP: 基于双分支 LSTM 的酒店评论情感分析模型构建与实现
  • 透视光合组织大会:算力生态重构金融AI落地新实践
  • C语言 指针
  • 【设计模式】 面向对象基础
  • 打破技术壁垒的先进制造框架的智慧工业开源了
  • 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物的影响?
  • Mac安装mitmproxy及操作对监控的请求
  • Android Glide常见问题解决方案:从图片加载到内存优化
  • 使用 Docker、Jenkins、Harbor 和 GitLab 构建 CI/CD 流水线
  • Linux文件系统深入解析:从原理到实践
  • 通义灵码插件——AI 重构表单开发!半小时搭建可视化拖拽系统,效率碾压传统模式
  • 面试:Spring