Docker Compose企业实战系列(二):SpringBoot+MySQL+Redis 后端项目完整部署
前言
上一篇我们用 Compose 一键搭建了 LNMP 网站环境,相信大家已经体会到了 Compose 多服务编排的真香之处。
日常开发和上线,最主流、最高频的架构是什么?
毫无疑问:SpringBoot + MySQL + Redis。
传统部署方式非常麻烦:服务器装JDK、装MySQL、装Redis、配置环境、开机自启、处理端口冲突、手动启动jar。
本篇直接给大家一套企业通用、开箱即用的后端全家桶 Compose 模板:
一键启动:数据库 + 缓存 + 后端项目,全程环境隔离、数据持久化、自动重启,适配开发测试/生产小集群。
一、整体架构说明
本次实战包含三大核心服务,完全模拟真实后端业务环境:
-
MySQL 8.0:业务数据持久化,挂载数据目录,删容器不丢数据
-
Redis 7.0:缓存、热点数据、会话存储,开启持久化
-
SpringBoot 后端服务:自定义构建镜像,依赖数据库缓存启动
所有服务加入同一自定义网桥,服务名直接通信,无需写IP。
二、统一项目目录结构
标准化目录,后续所有后端项目都可以套用:
springboot-docker/
├── .env # 统一环境变量
├── docker-compose.yml # 编排主文件
├── app/
│ ├── Dockerfile # 后端镜像构建文件
│ └── app.jar # 你的SpringBoot打包jar
├── mysql/
│ └── data/ # 数据库数据挂载
└── redis/
└── data/ # Redis持久化数据
三、编写环境变量 .env
统一管理所有账号密码、版本、端口,避免硬编码,方便换环境:
# MySQL
MYSQL_ROOT_PASSWORD=root123456
MYSQL_DATABASE=spring_db
MYSQL_USER=appuser
MYSQL_PASSWORD=app123456
# Redis
REDIS_PASSWORD=redis123456
# 镜像版本
MYSQL_VERSION=8.0
REDIS_VERSION=7.0-alpine
四、SpringBoot 通用 Dockerfile
在 app/ 目录创建 Dockerfile,这是企业通用轻量模板:
# 基于轻量JDK17镜像(可按需改为11/8)
FROM openjdk:17-jdk-slim
# 作者信息
MAINTAINER Compose-Practice
# 设置工作目录
WORKDIR /app
# 复制jar包到容器内
COPY app.jar app.jar
# 暴露项目端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java","-jar","app.jar"]
小贴士:如果你的项目是 JDK8,直接替换为 openjdk:8-jdk-alpine。
五、核心 docker-compose.yml 完整配置
根目录创建编排文件,零修改可直接运行:
version: '3.8'
services:
# MySQL数据库
mysql:
image: mysql:${MYSQL_VERSION}
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
networks:
- backend-net
# Redis缓存
redis:
image: redis:${REDIS_VERSION}
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
restart: always
networks:
- backend-net
# SpringBoot后端服务
app:
build: ./app
ports:
- "8080:8080"
depends_on:
- mysql
- redis
restart: always
networks:
- backend-net
# 自定义统一网络
networks:
backend-net:
driver: bridge
六、SpringBoot 配置文件适配(关键)
很多人部署报错,全是地址没改对!
容器互通不需要IP,直接写服务名即可。
application.yml 示例:
spring:
# 数据库配置
datasource:
url: jdbc:mysql://mysql:3306/spring_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: appuser
password: app123456
driver-class-name: com.mysql.cj.jdbc.Driver
# Redis配置
redis:
host: redis
port: 6379
password: redis123456
重点:host 填写 mysql、redis,这是 Compose 内置 DNS 解析!
七、部署完整流程
1. 打包项目
SpringBoot 执行 Maven/Gradle 打包,生成 app.jar,放入 app/ 目录。
2. 启动整套服务
# 构建镜像并后台启动
docker compose up -d --build
3. 查看启动日志
docker compose logs -f app
看到项目启动成功、无数据库/缓存报错,即部署完成。
八、高频运维命令(后端必备)
# 重启后端服务(更新jar后常用)
docker compose restart app
# 查看所有服务状态
docker compose ps
# 停止所有服务
docker compose stop
# 销毁容器(保留数据)
docker compose down
九、方案优势(对比传统部署)
-
环境零污染:服务器不需要装JDK、MySQL、Redis
-
环境统一:本地、测试、生产一模一样,杜绝环境问题
-
一键迁移:换服务器直接拉文件夹启动
-
自动重启:程序挂了自动恢复
-
数据安全:数据挂载宿主机,删容器不丢数据
十、新手避坑点
-
SpringBoot 配置地址必须写 mysql / redis,不能写 localhost
-
更新 jar 包必须重新构建:
docker compose up -d --build -
depends_on 只控制启动顺序,代码务必做好数据库重连重试
-
服务器安全组务必放行 8080、3306、6379 端口
本期总结
本篇我们搭建了 SpringBoot + MySQL + Redis 企业级 Compose 开发部署模板。
这套模板可以直接复用在:个人项目、毕业设计、外包项目、小型生产环境,是后端开发最高频、最实用的容器化部署方案。
下期预告
Docker Compose企业实战系列(三):前端Vue/React项目容器化部署
手把手教你前端打包、Nginx代理、静态资源容器化、跨域配置,完成前后端全套容器化部署。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/m0_63299656/article/details/166903741



