天衍四九-头像
关注

Docker Compose企业实战系列(二):SpringBoot\+MySQL\+Redis 后端项目完整部署

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

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--