在windows环境下通过docker-compose脚本自动创建mysql和redis

发布于:2025-04-10 ⋅ 阅读:(37) ⋅ 点赞:(0)

一、环境版本

在windows环境下通过docker容器运行各种服务,使用的软件版本如下:
docker desktop :V4.39.0 【docker的安装环境设置略】
mysql:9.2
redis:7.4.2

二、各配置文件

1.已经解决了字符集和排序规则问题造成的中文乱码问题,通过的docker compose脚本如下:

version: '3.8'

services:
  mysql:
    image: mysql:9.2
    container_name: win-mysql
    restart: always
    environment: 
      MYSQL_CHARSET: utf8mb4  
      MYSQL_CHARACTER_SET_SERVER: utf8mb4
      MYSQL_COLLATION: utf8mb4_unicode_ci  
      MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
      LANG: zh_CN.UTF-8
      LC_ALL: zh_CN.UTF-8
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: cms
      MYSQL_USER: cms
      MYSQL_PASSWORD: cms@123
    ports:
      - "3306:3306"
    volumes:
      - D:\pythonwork\RuoYi-Vue3-FastAPI\ruoyi-fastapi-backend\docker\mysql\conf\my.cnf:/etc/mysql/my.cnf
      - ./mysql/log:/var/log/mysql/
      - ./mysql/data:/var/lib/mysql/       # 数据持久化
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql  # 初始化SQL
    command: [  
      '--character-set-server=utf8mb4',  
      '--collation-server=utf8mb4_unicode_ci'  
    ]
    networks:
      - app_network

  redis: 
    image: redis:7.4
    container_name: win-redis
    restart: unless-stopped
    command: redis-server /usr/local/etc/redis/redis.conf
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data/               # 数据持久化
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf  # 自定义配置
      - ./redis/log:/var/log/redis/
    networks:
      - app_network

networks:
  app_network:
    driver: bridge

2.mysql配置文件如下:

[client]  
port=3306
socket=/var/run/mysql/mysql.sock
default-character-set=utf8mb4  

[mysql]  
default-character-set=utf8mb4  
#connect_timeout=10

[mysqld]  
port=3306
datadir=/var/lib/mysql
socket=/var/run/mysql/mysqld.sock
pid-file=/var/run/mysql/mysqld.pid
log-error=/var/log/mysql/error.log
lower_case_table_names = 1
autocommit = 1
character-set-server=utf8mb4  
collation-server=utf8mb4_unicode_ci
default-storage-engine=INNODB
default-time_size='+8:00'  
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
skip-character-set-client-handshake
innodb_buffer_pool_size=2G
# 键缓存大小
 key_buffer_size=64M
 # 允许的最大数据包大小
 max_allowed_packet=16M
 # 表缓存
 table_open_cache=6000
 # 排序缓存大小
 sort_buffer_size=16M
 # 网络缓冲区长度
 net_buffer_length=32K
 # 读取缓冲区大小
 read_buffer_size=16M
 # 随机读取缓冲区大小
 read_rnd_buffer_size=1024K
 # MyISAM 排序缓冲区大小
 myisam_sort_buffer_size=265M
 # 线程缓存大小
 thread_cache_size=512
 # 临时表大小
 tmp_table_size=512M
 # 启用显式默认时间戳
 explicit_defaults_for_timestamp=ON
 # 最大连接数
 max_connections=3000
 # 连接错误最大数量
 max_connect_errors=100
 # 打开文件限制
 open_files_limit=65535  

3.redis配置文件

#基础服务配置
# 以守护进程(后台)模式运行 Redis。在 Docker 中部署时需设置为 no,否则容器会立即退出。
daemonize no
#日志配置
logfile /var/log/redis/redis.log
loglevel debug
pidfile /var/run/redis.pid
# RDB 快照和 AOF 文件的存储路径,需确保该目录已挂载到宿主机(如 /docker/redis 目录)。
dir /data

#网络与访问控制
# 允许 Redis 监听所有网络接口(即所有 IP 地址)的连接,生产环境建议绑定内网 IP,避免直接暴露在公网。
bind 0.0.0.0
#关闭保护模式
protected-mode no
# 设置客户端连接密码,需通过 AUTH 密码 认证后才能操作。生产环境必须设置强密码,避免使用简单密码。
requirepass redis123 
# Redis 服务监听的端口号,默认是 6379。可修改为其他端口以增强安全性。
port 6379
# 客户端连接空闲超过300秒(即5分钟)后自动断开,释放资源。
timeout 300 
# 限制Redis同时支持的最大客户端连接数为 10000。超过此值会拒绝新连接。
maxclients 10000

# 持久化
# 在 900 秒(15 分钟)内,如果至少发生 1 次数据修改,则触发一次 RDB 快照保存。
save 900 1
# 在 300 秒(5 分钟)内,如果至少发生 10 次数据修改,则触发一次 RDB 快照保存。
save 300 10
# 在 60 秒(1 分钟)内,如果至少发生 10000 次数据修改,则触发一次 RDB 快照保存。
save 60 10000 
# RDB 快照的文件名,默认为 dump.rdb。
dbfilename dump.rdb 
rdbcompression yes
# 启用 AOF(Append-Only File)持久化模式,记录所有写操作。
appendonly yes
# AOF 日志同步策略:每秒同步一次磁盘,平衡性能与数据安全性(可选 always 或 no)。
appendfsync everysec

# 安全
# 禁用 FLUSHDB 命令(清空当前数据库),防止误操作或恶意攻击。
rename-command FLUSHDB ""
# 将 FLUSHALL 命令重命名为FLUSHALL_ENCRYPTED,需使用新名称执行该命令。 
rename-command FLUSHALL "FLUSHALL_ENCRYPTED"

# 内存管理
# 限制 Redis 最大可用内存为 4GB,超出限制时根据策略淘汰数据。
maxmemory 4gb 
# 当内存不足时,优先淘汰最近最少使用(LRU)的键(仅淘汰有过期时间的键)。allkeys-lru:所有键参与淘汰。volatile-ttl:淘汰剩余生存时间(TTL)最短的键。noeviction:禁止淘汰数据,直接报错(慎用)。
maxmemory-policy volatile-lru 

网站公告

今日签到

点亮在社区的每一天
去签到