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

Docker部署前后端项目完整教程(基于Spring Boot项目)

📚目录

1. Docker单独部署后端项目

1.1 环境准备

前置条件

检查Docker是否安装成功

1.2 Spring Boot项目准备

项目结构示例

application.yml配置

1.3 创建Dockerfile

基础版Dockerfile

优化版Dockerfile

1.4 构建Docker镜像

1. 打包Spring Boot应用

2. 构建Docker镜像

3. 镜像优化技巧

1.5 运行Docker容器

基本运行命令

容器管理命令

1.6 数据持久化

挂载卷示例

2. Docker单独部署前端项目

2.1 前端项目准备

Vue.js项目结构示例

Vue配置文件(vue.config.js)

2.2 创建前端Dockerfile

多阶段构建Dockerfile

2.3 Nginx配置文件

nginx.conf配置

2.4 构建和运行前端容器

构建镜像

运行容器

3. Docker Compose介绍

3.1 什么是Docker Compose

3.2 Docker Compose的优势

3.3 Docker Compose文件结构

基本结构

4. Docker Compose部署完整项目

4.1 项目架构设计

4.2 创建docker-compose.yml

完整的docker-compose.yml

4.3 目录结构组织

4.4 环境配置文件

.env文件

docker-compose.override.yml (开发环境)

4.5 启动和管理服务

常用命令

5. 完整实战案例:从零到部署

5.1 项目初始化

1. 创建项目目录

2. 初始化Spring Boot项目

5.2 后端代码实现

Controller示例

实体类示例

5.3 前端代码实现

Vue组件示例

5.4 数据库初始化

init.sql

5.5 一键部署脚本

deploy.sh

6. 项目验证与测试

6.1 服务健康检查

健康检查脚本

6.2 API测试

使用curl测试API

6.3 性能测试

简单压力测试

7. 常见问题与解决方案

7.1 容器启动问题

问题1:容器启动失败

问题2:数据库连接失败

7.2 网络连接问题

服务间无法通信

7.3 性能优化

镜像优化

资源限制

7.4 数据持久化问题

确保数据不丢失

8. 部署到生产环境

8.1 生产环境配置

docker-compose.prod.yml

8.2 安全配置

环境变量管理

Nginx SSL配置

8.3 监控和日志

日志配置

8.4 自动部署脚本

CI/CD部署脚本

8.5 备份和恢复

数据备份脚本

总结


1. Docker单独部署后端项目

1.1 环境准备

前置条件
  • 已安装Docker
  • Java 8/11/17开发环境
  • Maven或Gradle构建工具
  • Spring Boot项目
检查Docker是否安装成功
docker --version
docker-compose --version

1.2 Spring Boot项目准备

项目结构示例
my-spring-app/
├── src/
│   └── main/
│       ├── java/
│       └── resources/
│           └── application.yml
├── Dockerfile
├── pom.xml
└── target/└── my-app-1.0.0.jar
application.yml配置
server:port: 8080spring:datasource:url: jdbc:mysql://mysql-db:3306/mydbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: updateshow-sql: truemanagement:endpoints:web:exposure:include: health,info

1.3 创建Dockerfile

基础版Dockerfile
# 使用官方OpenJDK基础镜像
FROM openjdk:11-jre-slim# 设置维护者信息
LABEL maintainer="your-email@example.com"# 设置工作目录
WORKDIR /app# 复制jar包到容器中
COPY target/my-app-1.0.0.jar app.jar# 暴露端口
EXPOSE 8080# 运行应用
ENTRYPOINT ["java", "-jar", "app.jar"]
优化版Dockerfile
# 使用官方OpenJDK基础镜像
FROM openjdk:11-jre-slim# 设置维护者信息
LABEL maintainer="your-email@example.com"# 安装必要的工具
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*# 创建非root用户
RUN addgroup --system spring && adduser --system spring --ingroup spring# 设置工作目录
WORKDIR /app# 复制jar包到容器中
COPY target/my-app-1.0.0.jar app.jar# 修改文件所有者
RUN chown spring:spring app.jar# 切换到非root用户
USER spring# 设置JVM参数
ENV JAVA_OPTS="-Xmx512m -Xms256m"# 暴露端口
EXPOSE 8080# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \CMD curl -f http://localhost:8080/actuator/health || exit 1# 运行应用
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

1.4 构建Docker镜像

1. 打包Spring Boot应用
# 使用Maven打包
mvn clean package -DskipTests# 或使用Gradle打包
./gradlew clean build
2. 构建Docker镜像
# 基本构建命令
docker build -t my-spring-app:latest .# 带标签的构建
docker build -t my-spring-app:v1.0 .# 查看构建的镜像
docker images
3. 镜像优化技巧
# 多阶段构建Dockerfile
FROM maven:3.8.4-openjdk-11 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTestsFROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/my-app-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

1.5 运行Docker容器

基本运行命令
# 基本运行
docker run -d --name my-spring-container -p 8080:8080 my-spring-app:latest# 带环境变量运行
docker run -d --name my-spring-container \-p 8080:8080 \-e SPRING_PROFILES_ACTIVE=prod \-e JAVA_OPTS="-Xmx1g" \my-spring-app:latest
容器管理命令
# 查看运行中的容器
docker ps# 查看容器日志
docker logs my-spring-container# 实时查看日志
docker logs -f my-spring-container# 进入容器
docker exec -it my-spring-container /bin/bash# 停止容器
docker stop my-spring-container# 删除容器
docker rm my-spring-container

1.6 数据持久化

挂载卷示例
# 挂载配置文件
docker run -d --name my-spring-container \-p 8080:8080 \-v /host/config:/app/config \-v /host/logs:/app/logs \my-spring-app:latest

2. Docker单独部署前端项目

2.1 前端项目准备

Vue.js项目结构示例
my-vue-app/
├── src/
├── public/
├── package.json
├── vue.config.js
├── Dockerfile
├── nginx.conf
└── dist/
Vue配置文件(vue.config.js)
module.exports = {publicPath: '/',outputDir: 'dist',devServer: {port: 3000,proxy: {'/api': {target: 'http://localhost:8080',changeOrigin: true,pathRewrite: {'^/api': ''}}}}
}

2.2 创建前端Dockerfile

多阶段构建Dockerfile
# 第一阶段:构建应用
FROM node:16-alpine AS builder# 设置工作目录
WORKDIR /app# 复制package文件
COPY package*.json ./# 安装依赖
RUN npm ci --only=production# 复制源代码
COPY . .# 构建应用
RUN npm run build# 第二阶段:运行应用
FROM nginx:alpine# 复制自定义nginx配置
COPY nginx.conf /etc/nginx/nginx.conf# 从构建阶段复制dist文件
COPY --from=builder /app/dist /usr/share/nginx/html# 暴露端口
EXPOSE 80# 启动nginx
CMD ["nginx", "-g", "daemon off;"]

2.3 Nginx配置文件

nginx.conf配置
events {worker_connections 1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;# 日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;error_log /var/log/nginx/error.log;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;# Gzip压缩gzip on;gzip_vary on;gzip_min_length 1024;gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/javascript application/json;server {listen 80;server_name localhost;root /usr/share/nginx/html;index index.html;# 处理Vue路由location / {try_files $uri $uri/ /index.html;}# API代理location /api/ {proxy_pass http://backend:8080/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}# 静态资源缓存location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {expires 1y;add_header Cache-Control "public, immutable";}}
}

2.4 构建和运行前端容器

构建镜像
# 构建前端镜像
docker build -t my-vue-app:latest .# 查看镜像
docker images
运行容器
# 运行前端容器
docker run -d --name my-vue-container -p 80:80 my-vue-app:latest# 测试访问
curl http://localhost

3. Docker Compose介绍

3.1 什么是Docker Compose

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务,然后使用单个命令创建并启动所有服务。

3.2 Docker Compose的优势

  • 简化部署:一个命令启动整个应用栈
  • 环境隔离:每个项目都有独立的环境
  • 服务编排:定义服务间的依赖关系
  • 可扩展性:轻松扩展服务实例
  • 配置管理:统一管理
http://www.lryc.cn/news/582792.html

相关文章:

  • 【计算机组成原理】-CPU章节学习篇—笔记随笔
  • 开疆智能Profinet转DeviceNet网关连接掘场空气流量计配置案例
  • 用 Spring Boot + Redis 实现哔哩哔哩弹幕系统(上篇博客改进版)
  • RHA《Unity兼容AndroidStudio打Apk包》
  • 分享|大数据采集工程师职业技术报考指南
  • C# IIncrementalGenerator干点啥
  • N8N与Dify:自动化与AI的完美搭配
  • 基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(1)搭建框架基本雏形
  • UE5内置插件 AnimToTexture 简单入门
  • Spring Boot 项目中的多数据源配置
  • ElasticSearch集群状态查询及_cat 命令详解
  • GitHub Copilot 三种模式详解:Ask、Agent、Edit
  • 【web安全】SQLMap 参数深度解析:--risk 与 --level 详解
  • leetcode-二叉树的层序遍历-113
  • 基于Java+Maven+Testng+RestAssured+Allure+Jenkins搭建一个接口自动化框架
  • 谁主沉浮:人工智能对未来信息技术发展路径的影响研究
  • 基于 Rust 的Actix Web 框架的应用与优化实例
  • 从零构建MCP服务器:FastMCP实战指南
  • 基于物联网架构的温室环境温湿度传感器节点设计
  • 微信小程序控制空调之接收MQTT消息
  • Maven 打包排除特定依赖的完整指南(详细方法 + 示例)
  • 作业03-SparkSQL开发
  • 无缝矩阵的音频合成与音频分离功能详解
  • Rust BSS段原理与实践解析
  • RustFS一款Rust 驱动的 高性能 分布式存储系统
  • Modbus TCP转Profinet网关实现视觉相机与西门子PLC配置实例研究
  • Tomcat:启用https(Windows)
  • 传输层协议TCP、UDP
  • CI/CD — DevOps概念之实现k8s持续交付持续集成(一)
  • 数据结构:位图