Docker 容器化
概述
项目提供 Docker Compose 编排方案,一键部署完整的后端服务、数据库和缓存环境。编排文件位于 script/docker/ 目录。
文件结构
script/docker/
├── docker-compose.yml # 服务编排配置
├── docker.env # 环境变量配置
├── Docker-HOWTO.md # 构建说明
├── yudao-server/
│ └── Dockerfile # 后端服务镜像
└── yudao-ui-admin/
├── Dockerfile # 管理后台前端镜像
├── .dockerignore # 构建排除文件
└── nginx.conf # 容器内 Nginx 配置
服务定义
服务清单
| 服务 | 容器名 | 镜像 | 端口映射 | 说明 |
|---|---|---|---|---|
| MySQL | yudao-mysql | mysql:8 | 3306:3306 | 数据库 |
| Redis | yudao-redis | redis:6-alpine | 6379:6379 | 缓存 |
| Server | yudao-server | yudao-server(构建) | 48080:48080 | 后端 API |
| Admin | yudao-admin | yudao-admin(构建) | 8080:80 | 管理后台前端 |
MySQL 服务
mysql:
container_name: yudao-mysql
image: mysql:8
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE:-ruoyi-vue-pro}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
volumes:
- mysql:/var/lib/mysql/
- ../../sql/mysql/ruoyi-vue-pro.sql:/docker-entrypoint-initdb.d/ruoyi-vue-pro.sql:ro
关键点:
- 首次启动自动执行
ruoyi-vue-pro.sql初始化数据库 - 数据持久化到
mysql命名卷 - 默认数据库名
ruoyi-vue-pro,密码123456
Redis 服务
redis:
container_name: yudao-redis
image: redis:6-alpine
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis:/data
使用 Alpine 轻量镜像,数据持久化到 redis 命名卷。
后端服务
server:
container_name: yudao-server
build:
context: ./yudao-server/
image: yudao-server
restart: unless-stopped
ports:
- "48080:48080"
environment:
SPRING_PROFILES_ACTIVE: local
JAVA_OPTS: ${JAVA_OPTS:--Xms512m -Xmx512m}
ARGS:
--spring.datasource.dynamic.datasource.master.url=jdbc:mysql://yudao-mysql:3306/...
--spring.redis.host=yudao-redis
depends_on:
- mysql
- redis
关键点:
- 通过
depends_on确保 MySQL 和 Redis 先启动 - 数据源地址使用容器名
yudao-mysql作为主机名 - Redis 地址使用容器名
yudao-redis - JVM 默认参数:堆内存 512MB
管理后台前端
admin:
container_name: yudao-admin
build:
context: ./yudao-ui-admin
args:
NODE_ENV: ${NODE_ENV:-production}
VUE_APP_BASE_API: ${VUE_APP_BASE_API:-/prod-api}
VUE_APP_TITLE: ${VUE_APP_TITLE:-芋道管理系统}
image: yudao-admin
restart: unless-stopped
ports:
- "8080:80"
depends_on:
- server
环境变量配置
docker.env 文件定义了所有可配置的环境变量:
## MySQL
MYSQL_DATABASE=ruoyi-vue-pro
MYSQL_ROOT_PASSWORD=123456
## 后端 JVM 参数
JAVA_OPTS=-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom
## 主数据源
MASTER_DATASOURCE_URL=jdbc:mysql://yudao-mysql:3306/${MYSQL_DATABASE}?useSSL=false&serverTimezone=Asia/Shanghai
MASTER_DATASOURCE_USERNAME=root
MASTER_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD}
## 从数据源(默认与主数据源相同)
SLAVE_DATASOURCE_URL=${MASTER_DATASOURCE_URL}
SLAVE_DATASOURCE_USERNAME=${MASTER_DATASOURCE_USERNAME}
SLAVE_DATASOURCE_PASSWORD=${MASTER_DATASOURCE_PASSWORD}
## Redis
REDIS_HOST=yudao-redis
## 前端构建参数
NODE_ENV=production
VUE_APP_BASE_API=/prod-api
VUE_APP_TITLE=芋道管理系统
VUE_APP_TENANT_ENABLE=true
VUE_APP_CAPTCHA_ENABLE=true
构建与启动
前置条件
- Docker Engine 20.10+
- Docker Compose v2(支持
docker compose命令)
步骤一:构建 JAR 包
使用 Maven Docker 镜像编译后端代码:
# 创建 Maven 缓存卷
docker volume create --name yudao-maven-repo
# 编译打包
docker run -it --rm --name yudao-maven \
-v yudao-maven-repo:/root/.m2 \
-v $PWD:/usr/src/mymaven \
-w /usr/src/mymaven \
maven mvn clean install package '-Dmaven.test.skip=true'
步骤二:启动所有服务
docker compose --env-file docker.env up -d
首次运行会自动构建所有容器镜像。
常用命令
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f server
# 重新构建某个服务
docker compose build server
# 停止所有服务
docker compose down
# 停止并清除数据卷(慎用,会删除数据库数据)
docker compose down -v
端口映射汇总
| 服务 | 访问地址 |
|---|---|
| 管理后台 UI | http://localhost:8080 |
| 后端 API | http://localhost:48080 |
| MySQL | localhost:3306(root/123456) |
| Redis | localhost:6379 |
数据持久化
| 卷名 | 用途 |
|---|---|
mysql | MySQL 数据文件 |
redis | Redis 持久化数据 |
注意事项
- 生产环境:务必修改 MySQL 默认密码和 Redis 无密码访问
- 数据备份:定期备份 MySQL 数据卷
- JVM 调优:根据服务器内存调整
JAVA_OPTS中的-Xms和-Xmx - 网络:容器间通过 Docker 内部网络通信,使用容器名作为主机名
- 日志:通过
docker compose logs查看各服务日志
sidebar_position: 1 title: Docker����
Docker����
���ĵ����ڽ����У������ڴ���