使用Docke部署若依项目
使用Docker + Docker Compose部署若依(RuoYi)Java单体应用
本文将详细介绍如何使用Docker + Docker Compose部署若依单体应用,实现开箱即用的容器化部署方案。
1. 环境准备
1.1 系统要求
- 操作系统:Linux/Windows/macOS
- 内存:至少4GB
- 磁盘空间:至少10GB
1.2 Docker安装
Ubuntu/Debian系统:
# 更新包索引
sudo apt update
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
CentOS/RHEL系统:
# 安装Docker
sudo yum install -y docker
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker
Windows系统:
下载Docker Desktop for Windows并按提示安装。
1.3 Docker Compose安装
# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
2. 项目准备
2.1 获取若依源码
# 克隆若依项目
git clone https://gitee.com/y_project/RuoYi.git
cd RuoYi
2.2 修改应用配置
修改src/main/resources/application-druid.yml数据库配置:
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://mysql:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
修改src/main/resources/application.yml Redis配置:
# redis 配置
redis:
# 地址
host: redis
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
2.3 创建Dockerfile
在项目根目录创建Dockerfile:
# 使用OpenJDK 8作为基础镜像
FROM openjdk:8-jre-alpine
# 设置维护者信息
LABEL maintainer="ruoyi@example.com"
# 设置时区
RUN apk add --no-cache tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 创建应用目录
WORKDIR /app
# 复制jar包到容器
COPY target/ruoyi-admin.jar app.jar
# 暴露端口
EXPOSE 8080
# 设置JVM参数
ENV JAVA_OPTS="-Xmx512m -Xms512m"
# 启动应用
ENTRYPOINT exec java $JAVA_OPTS -jar app.jar
2.4 Maven打包配置
修改pom.xml,确保打包插件配置正确:
<build>
<finalName>ruoyi-admin</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.15</version>
<configuration>
<fork>true</fork>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3. 中间件配置
3.1 MySQL初始化脚本
创建docker/mysql/init目录,并将若依的SQL初始化文件复制到该目录:
mkdir -p docker/mysql/init
cp sql/quartz.sql docker/mysql/init/
cp sql/ry_20231130.sql docker/mysql/init/
3.2 MySQL配置文件
创建docker/mysql/conf/my.cnf:
[mysqld]
# 基础配置
default-storage-engine=INNODB
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
explicit_defaults_for_timestamp=true
lower_case_table_names=1
# 性能优化
max_connections=200
max_connect_errors=6000
open_files_limit=65535
table_open_cache=128
max_allowed_packet=4M
binlog_cache_size=1M
max_heap_table_size=8M
tmp_table_size=16M
# 日志配置
log-error=/var/log/mysql/error.log
slow_query_log=1
long_query_time=1
slow_query_log_file=/var/log/mysql/slow.log
[mysql]
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4
3.3 Redis配置文件
创建docker/redis/redis.conf:
# 网络配置
bind 0.0.0.0
port 6379
timeout 300
# 通用配置
daemonize no
loglevel notice
databases 16
# 内存管理
maxmemory 256mb
maxmemory-policy allkeys-lru
# 持久化配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
# AOF配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
4. Docker Compose编排
创建docker-compose.yml文件:
version: '3.8'
services:
# MySQL数据库
mysql:
image: mysql:8.0
container_name: ruoyi-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: ry
MYSQL_USER: ruoyi
MYSQL_PASSWORD: 123456
TZ: Asia/Shanghai
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/mysql/init:/docker-entrypoint-initdb.d
- mysql_logs:/var/log/mysql
command: --default-authentication-plugin=mysql_native_password
networks:
- ruoyi-network
# Redis缓存
redis:
image: redis:7-alpine
container_name: ruoyi-redis
restart: always
ports:
- "6379:6379"
volumes:
- redis_data:/data
- ./docker/redis/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
networks:
- ruoyi-network
# 若依应用
ruoyi-app:
build:
context: .
dockerfile: Dockerfile
container_name: ruoyi-app
restart: always
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=druid
- TZ=Asia/Shanghai
volumes:
- app_logs:/app/logs
- app_upload:/app/upload
depends_on:
- mysql
- redis
networks:
- ruoyi-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
# 网络配置
networks:
ruoyi-network:
driver: bridge
# 数据卷配置
volumes:
mysql_data:
driver: local
mysql_logs:
driver: local
redis_data:
driver: local
app_logs:
driver: local
app_upload:
driver: local
5. 部署步骤
5.1 项目编译打包
# 清理并打包项目
mvn clean package -DskipTests
# 验证jar包生成
ls -la target/ruoyi-admin.jar
5.2 启动服务
# 构建并启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f ruoyi-app
5.3 验证部署
# 检查容器状态
docker ps
# 检查网络连通性
docker exec ruoyi-app ping mysql
docker exec ruoyi-app ping redis
# 访问应用
curl http://localhost:8080
# 检查数据库连接
docker exec -it ruoyi-mysql mysql -uroot -p123456 -e "show databases;"
5.4 访问系统
打开浏览器访问:http://localhost:8080
默认账号密码:
- 管理员:admin/admin123
- 普通用户:ry/admin123
6. 常见问题与解决方案
6.1 容器启动失败
问题:MySQL容器启动失败
# 查看详细错误日志
docker-compose logs mysql
# 常见原因:端口被占用
sudo netstat -tlnp | grep 3306
解决方案:
# 修改端口映射
ports:
- "3307:3306" # 使用3307端口
6.2 数据库连接失败
问题:应用无法连接数据库
# 检查网络连通性
docker exec ruoyi-app ping mysql
解决方案:
# 确保depends_on配置正确
depends_on:
- mysql
- redis
6.3 内存不足
问题:容器因内存不足被杀死
# 查看系统资源使用
docker stats
# 查看容器退出原因
docker inspect ruoyi-app | grep -A 5 -B 5 ExitCode
解决方案:
# 限制容器内存使用
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512M
6.4 性能优化建议
JVM优化:
ENV JAVA_OPTS="-Xmx1g -Xms1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
MySQL优化:
# 调整缓冲池大小
innodb_buffer_pool_size=512M
innodb_buffer_pool_instances=2
Redis优化:
# 调整最大内存
maxmemory 512mb
maxmemory-policy allkeys-lru
6.5 数据备份
# 数据库备份
docker exec ruoyi-mysql mysqldump -uroot -p123456 ry > backup.sql
# Redis备份
docker exec ruoyi-redis redis-cli BGSAVE
# 文件上传目录备份
docker cp ruoyi-app:/app/upload ./upload_backup
6.6 日志管理
# 查看应用日志
docker-compose logs -f --tail=100 ruoyi-app
# 配置日志轮转
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
7. 生产环境部署建议
7.1 安全配置
# 生产环境docker-compose.yml
services:
mysql:
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
secrets:
- mysql_root_password
secrets:
mysql_root_password:
file: ./secrets/mysql_root_password.txt
7.2 反向代理
使用Nginx作为反向代理:
upstream ruoyi {
server localhost:8080;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://ruoyi;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
7.3 监控配置
# 添加监控服务
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml

浙公网安备 33010602011771号