使用 Docker Compose 部署 Spring Boot 应用:SmartAdmin 实战指南
文章目录
- 前言
- 一、项目概述
- 二、配置文件详解
- 1.Docker Compose 配置 (docker-compose.yml)
- 2.Dockerfile 配置
- 3.环境变量配置 (.env)可选
- 三、部署步骤
- 1.准备工作
- 2.部署数据库和 Redis 服务
- 3. 应用部署
- 总结
前言
在现代应用开发中,容器化部署已成为标准实践。本文将详细介绍如何使用 Docker Compose 部署一个基于 Spring Boot 的 SmartAdmin 应用,涵盖从配置文件编写到实际部署的全过程。
Smart-Admin代码仓库:https://gitee.com/lab1024/smart-admin.git
一、项目概述
SmartAdmin 是一个基于 Spring Boot 的后台管理系统,我们需要将其容器化部署。部署环境包括:
- Spring Boot 应用(本次使用 Java 17)
- MySQL 8 数据库
- Redis 缓存服务
- 通过 1Panel 进行服务管理(可选)
为了快速实践,将文件统一放在一个目录/opt/1panel/docker/compose/smartadmin
包含文件:.env、Dockerfile、docker-compose.yml、jar包

二、配置文件详解
1.Docker Compose 配置 (docker-compose.yml)
${MYSQL_URL}是使用了env环境变量文件(可选),也可以直接将实际的参数填上去,如SPRING_DATA_REDIS_HOST=127.0.0.1
version: '3.8'services:smartadmin:build:context: .dockerfile: Dockerfileimage: smartadmin:latestcontainer_name: smartadmin-appports:- "11024:11024"environment:- SPRING_PROFILES_ACTIVE=test- SPRING_DATASOURCE_URL=${MYSQL_URL}- SPRING_DATASOURCE_USERNAME=${MYSQL_USER}- SPRING_DATASOURCE_PASSWORD=${MYSQL_PASSWORD}- SPRING_DATA_REDIS_HOST=${REDIS_HOST}- SPRING_DATA_REDIS_PORT=${REDIS_PORT}- SPRING_DATA_REDIS_PASSWORD=${REDIS_PASSWORD}- SPRING_DATA_REDIS_DATABASE=${REDIS_DATABASE}- JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8networks:- 1panel-networkrestart: unless-stoppednetworks:1panel-network:external: true
配置解析:
- 版本:使用 Docker Compose 3.8 版本
- 服务构建:基于当前目录的 Dockerfile 构建镜像
- 端口映射:将容器内 11024 端口映射到主机 11024 端口
- 环境变量:配置 Spring Boot 的运行参数和数据库连接信息
- 网络配置:使用外部网络 1panel-network实现容器间通信
- 重启策略:除非手动停止,否则自动重启
2.Dockerfile 配置
FROM eclipse-temurin:17-jre-alpine# 创建应用目录
WORKDIR /app# 复制JAR包到容器
COPY sa-admin-test-3.0.0.jar app.jar# 暴露端口
EXPOSE 11024# 设置JVM参数
ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC"# 启动应用
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
配置解析:
- 基础镜像:使用轻量级的 Eclipse Temurin 17 JRE Alpine 版本
- 工作目录:设置 /app为工作目录
- 应用部署:复制 JAR 文件并重命名为 app.jar
- JVM 优化:配置堆内存和使用 G1 垃圾回收器
- 启动命令:使用 Shell 形式启动 Java 应用
3.环境变量配置 (.env)可选
MYSQL_URL=jdbc:p6spy:mysql://mysql8:3306/smart_admin_v3?allowPublicKeyRetrieval=true&autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
MYSQL_USER=smart_admin
MYSQL_PASSWORD=smart_admin
REDIS_HOST=redis-1
REDIS_PORT=6379
REDIS_PASSWORD=123456
REDIS_DATABASE=0
配置解析:
- 数据库连接:使用 P6Spy 监控 SQL,连接名为 mysql8的 MySQL 服务
- 连接参数:配置了字符集、时区、SSL 等重要参数
- Redis 配置:连接名为 redis-1的 Redis 服务
三、部署步骤
1.准备工作
确保已安装 Docker 和 Docker Compose,并创建外部网络:
docker network create 1panel-network
2.部署数据库和 Redis 服务
在 1Panel 中部署 MySQL 8 和 Redis 服务,确保服务名与 .env文件中的配置一致。
3. 应用部署
在项目根目录(包含 docker-compose.yml、Dockerfile 和 .env 文件的目录)执行
# 构建并启动服务
docker-compose up -d# 查看服务状态
docker-compose ps# 查看日志
docker-compose logs -f smartadmin
总结
本文详细介绍了使用 Docker Compose 部署 Spring Boot 应用的完整流程。通过容器化部署,我们实现了:
- 环境一致性:开发、测试、生产环境一致
- 快速部署:一键启动所有依赖服务
- 资源隔离:各服务运行在独立容器中
- 易于扩展:可快速水平扩展应用实例
这种部署方式特别适合微服务架构和持续集成/持续部署(CI/CD)流程,能够显著提高开发和运维效率。
