first commit
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# Docker Windows 新手启动指南
|
||||
|
||||
本地 Windows 开发环境启动 MySQL / Redis / RabbitMQ 三个容器。
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 已安装并启动 **Docker Desktop**(任务栏图标变绿才算启动完成)
|
||||
|
||||
## 首次启动(只做一次)
|
||||
|
||||
1. 创建 MySQL 数据卷:
|
||||
|
||||
```powershell
|
||||
docker volume create changzhou_mysql_data
|
||||
```
|
||||
|
||||
2. 启动容器(⚠️ 必须先 cd 到 compose 目录,且必须带两个 -f 参数):
|
||||
|
||||
```powershell
|
||||
cd d:\changzhou_app\changzhou_backend\docker\compose
|
||||
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
|
||||
```
|
||||
|
||||
> ⚠️ **不要只执行 `docker-compose up -d`**!
|
||||
> 少了 `-f docker-compose.dev.yml` 会导致 Redis 容器找不到 redis.conf,
|
||||
> 状态一直是 Restarting 无限重启。
|
||||
> dev 覆盖文件负责把 `docker/config/redis/redis.dev.conf` 挂载进容器。
|
||||
|
||||
3. 验证:
|
||||
|
||||
```powershell
|
||||
docker ps
|
||||
# 三个容器都应为 Up 状态:mysql_db / redis_cache / rabbitmq_server
|
||||
|
||||
docker exec redis_cache redis-cli ping
|
||||
# 返回 NOAUTH Authentication required. 是正常的(Redis 已启动且带密码)
|
||||
```
|
||||
|
||||
## 端口对照表(宿主机 → 容器)
|
||||
|
||||
| 服务 | 本机地址 | 容器端口 | 账号信息 |
|
||||
|------|---------|---------|---------|
|
||||
| MySQL | 127.0.0.1:23306 | 3306 | root/123456,业务库 changzhou |
|
||||
| Redis | 127.0.0.1:26379 | 6379 | 密码见 redis.dev.conf |
|
||||
| RabbitMQ | 127.0.0.1:25672 | 5672 | skins/mk,vhost /skins |
|
||||
| RabbitMQ 管理台 | http://127.0.0.1:35672 | 15672 | skins/mk |
|
||||
|
||||
## 日常操作
|
||||
|
||||
```powershell
|
||||
# 都在 docker\compose 目录下执行
|
||||
cd d:\changzhou_app\changzhou_backend\docker\compose
|
||||
|
||||
# 启动
|
||||
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
|
||||
|
||||
# 停止
|
||||
docker-compose -f docker-compose.yml -f docker-compose.dev.yml stop
|
||||
|
||||
# 查看状态
|
||||
docker ps
|
||||
|
||||
# 查看某个容器日志
|
||||
docker logs redis_cache --tail 50
|
||||
|
||||
# 重建某个容器(比如改了配置)
|
||||
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --force-recreate redis
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 1. Redis 一直 Restarting
|
||||
|
||||
启动命令少了 `-f docker-compose.dev.yml`,重建即可:
|
||||
|
||||
```powershell
|
||||
cd d:\changzhou_app\changzhou_backend\docker\compose
|
||||
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --force-recreate redis
|
||||
```
|
||||
|
||||
### 2. 提示 `external volume "changzhou_mysql_data" not found`
|
||||
|
||||
```powershell
|
||||
docker volume create changzhou_mysql_data
|
||||
```
|
||||
|
||||
### 3. 提示 `cannot find the file specified`
|
||||
|
||||
没有 cd 到 `docker\compose` 目录就执行了命令,`-f` 的相对路径按当前目录解析。
|
||||
|
||||
### 4. 和 chengdu 项目切换
|
||||
|
||||
端口可能冲突,先到另一个项目的 compose 目录执行 `docker-compose stop`,再启动本项目。
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 自动创建 external 数据卷(首次部署时)
|
||||
for vol in changzhou_mysql_data; do
|
||||
docker volume inspect "$vol" >/dev/null 2>&1 || docker volume create "$vol" >/dev/null
|
||||
done
|
||||
|
||||
# 环境选择:ENV=dev 使用开发规格,否则按 CPU 核数自动检测
|
||||
if [ "${ENV:-prod}" = "dev" ]; then
|
||||
SIZE="dev"
|
||||
else
|
||||
CPUS=$(nproc)
|
||||
if [ "$CPUS" -le 16 ]; then
|
||||
SIZE="16c32g"
|
||||
else
|
||||
SIZE="32c64g"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 镜像源:默认海外,PROXY=cn 切换国内代理
|
||||
if [ "${PROXY:-overseas}" = "cn" ]; then
|
||||
export COMPOSE_FILE="docker-compose.yml:docker-compose.cn.yml:docker-compose.${SIZE}.yml"
|
||||
else
|
||||
export COMPOSE_FILE="docker-compose.yml:docker-compose.${SIZE}.yml"
|
||||
fi
|
||||
|
||||
echo "Env: ${ENV:-prod} | Size: ${SIZE} | Proxy: ${PROXY:-cn}"
|
||||
exec docker compose "$@"
|
||||
@@ -0,0 +1,18 @@
|
||||
services:
|
||||
mysql:
|
||||
build:
|
||||
args:
|
||||
MYSQL_CONF: my.cnf.16c32g
|
||||
shm_size: 128m
|
||||
mem_limit: 8g
|
||||
cpus: 4
|
||||
|
||||
redis:
|
||||
volumes:
|
||||
- ../config/redis/redis.16c32g.conf:/usr/local/etc/redis/redis.conf:ro
|
||||
mem_limit: 2g
|
||||
cpus: 1
|
||||
|
||||
rabbitmq:
|
||||
mem_limit: 2g
|
||||
cpus: 1
|
||||
@@ -0,0 +1,18 @@
|
||||
services:
|
||||
mysql:
|
||||
build:
|
||||
args:
|
||||
MYSQL_CONF: my.cnf.32c64g
|
||||
shm_size: 256m
|
||||
mem_limit: 12g
|
||||
cpus: 8
|
||||
|
||||
redis:
|
||||
volumes:
|
||||
- ../config/redis/redis.32c64g.conf:/usr/local/etc/redis/redis.conf:ro
|
||||
mem_limit: 4g
|
||||
cpus: 2
|
||||
|
||||
rabbitmq:
|
||||
mem_limit: 4g
|
||||
cpus: 2
|
||||
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
mysql:
|
||||
build:
|
||||
args:
|
||||
MYSQL_BASE_IMAGE: m.daocloud.io/docker.io/mysql:8.0.24
|
||||
|
||||
redis:
|
||||
image: m.daocloud.io/docker.io/redis:latest
|
||||
|
||||
rabbitmq:
|
||||
image: m.daocloud.io/docker.io/rabbitmq:3.9-management
|
||||
@@ -0,0 +1,15 @@
|
||||
services:
|
||||
mysql:
|
||||
build:
|
||||
args:
|
||||
MYSQL_CONF: my.cnf.dev
|
||||
shm_size: 64m
|
||||
mem_limit: 1g
|
||||
|
||||
redis:
|
||||
volumes:
|
||||
- ../config/redis/redis.dev.conf:/usr/local/etc/redis/redis.conf:ro
|
||||
mem_limit: 256m
|
||||
|
||||
rabbitmq:
|
||||
mem_limit: 256m
|
||||
@@ -0,0 +1,89 @@
|
||||
services:
|
||||
# MySQL 8.0.24 服务
|
||||
mysql:
|
||||
build:
|
||||
context: ../config/mysql
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
MYSQL_BASE_IMAGE: mysql:8.0.24
|
||||
MYSQL_CONF: my.cnf.16c32g
|
||||
container_name: mysql_db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
MYSQL_DATABASE: changzhou
|
||||
MYSQL_USER: changzhou
|
||||
MYSQL_PASSWORD: iTSJSPPZM3LSGAPC
|
||||
ports:
|
||||
- "127.0.0.1:23306:3306"
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "3"
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p123456"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
networks:
|
||||
- changzhou_app_network
|
||||
|
||||
# Redis 服务
|
||||
redis:
|
||||
image: redis:latest
|
||||
container_name: redis_cache
|
||||
restart: unless-stopped
|
||||
command: redis-server /usr/local/etc/redis/redis.conf
|
||||
ports:
|
||||
- "127.0.0.1:26379:6379"
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "3"
|
||||
networks:
|
||||
- changzhou_app_network
|
||||
|
||||
# RabbitMQ 3.9 服务
|
||||
rabbitmq:
|
||||
image: rabbitmq:3.9-management
|
||||
container_name: rabbitmq_server
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
RABBITMQ_DEFAULT_USER: skins
|
||||
RABBITMQ_DEFAULT_PASS: mk
|
||||
ports:
|
||||
- "127.0.0.1:25672:5672"
|
||||
- "127.0.0.1:35672:15672"
|
||||
command: >
|
||||
bash -c "rabbitmq-server &
|
||||
sleep 20 &&
|
||||
rabbitmqctl add_vhost /skins &&
|
||||
rabbitmqctl set_permissions -p /skins skins '.*' '.*' '.*' &&
|
||||
rabbitmqadmin --vhost=/skins --username=skins --password=mk declare queue name=notice_queue durable=true &&
|
||||
rabbitmqadmin --vhost=/skins --username=skins --password=mk declare queue name=dlk_queue durable=true &&
|
||||
rabbitmqadmin --vhost=/skins --username=skins --password=mk declare queue name=delivery_queue durable=true &&
|
||||
wait"
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "50m"
|
||||
max-file: "3"
|
||||
networks:
|
||||
- changzhou_app_network
|
||||
|
||||
# 定义数据卷(external 固定卷名,不随目录变化,防止换目录丢数据)
|
||||
volumes:
|
||||
mysql_data:
|
||||
external: true
|
||||
name: changzhou_mysql_data
|
||||
|
||||
# 定义网络
|
||||
networks:
|
||||
changzhou_app_network:
|
||||
driver: bridge
|
||||
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
# MySQL 数据卷迁移脚本
|
||||
# 将旧自动命名卷的数据复制到 external 卷 changzhou_mysql_data
|
||||
# 用法:bash migrate-mysql-volume.sh [旧卷名]
|
||||
# 不传参数时自动检测 docker_changzhou_mysql_data 和 docker-cn_changzhou_mysql_data
|
||||
|
||||
set -e
|
||||
|
||||
NEW_VOL="changzhou_mysql_data"
|
||||
IMAGE="mysql:8.0.24"
|
||||
|
||||
# 自动检测旧卷名
|
||||
if [ -n "$1" ]; then
|
||||
OLD_VOL="$1"
|
||||
else
|
||||
for candidate in docker_changzhou_mysql_data docker-cn_changzhou_mysql_data; do
|
||||
if docker volume inspect "$candidate" >/dev/null 2>&1; then
|
||||
OLD_VOL="$candidate"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -z "$OLD_VOL" ]; then
|
||||
echo "ERROR: 未找到旧数据卷,请手动指定:bash migrate-mysql-volume.sh <旧卷名>"
|
||||
echo "可用的卷列表:"
|
||||
docker volume ls --format ' {{.Name}}' | grep -i mysql || echo " (无 mysql 相关卷)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查新卷是否存在
|
||||
if ! docker volume inspect "$NEW_VOL" >/dev/null 2>&1; then
|
||||
echo "创建 external 卷: $NEW_VOL"
|
||||
docker volume create "$NEW_VOL"
|
||||
fi
|
||||
|
||||
# 检查旧卷数据大小
|
||||
OLD_SIZE=$(docker run --rm -v "${OLD_VOL}:/data" "$IMAGE" sh -c "du -sh /data" 2>/dev/null | awk '{print $1}')
|
||||
echo "旧卷 $OLD_VOL 数据量: $OLD_SIZE"
|
||||
|
||||
# 停掉 MySQL 容器(如果在运行)
|
||||
if docker inspect mysql_db >/dev/null 2>&1; then
|
||||
echo "停止 MySQL 容器..."
|
||||
docker stop mysql_db 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 清空新卷(避免数据叠加)
|
||||
echo "清空新卷 $NEW_VOL ..."
|
||||
docker volume rm "$NEW_VOL" >/dev/null
|
||||
docker volume create "$NEW_VOL" >/dev/null
|
||||
|
||||
# 复制数据
|
||||
echo "开始迁移 $OLD_VOL -> $NEW_VOL ..."
|
||||
docker run --rm \
|
||||
-v "${OLD_VOL}:/from" \
|
||||
-v "${NEW_VOL}:/to" \
|
||||
"$IMAGE" \
|
||||
sh -c "cp -a /from/. /to/"
|
||||
|
||||
# 验证
|
||||
NEW_SIZE=$(docker run --rm -v "${NEW_VOL}:/data" "$IMAGE" sh -c "du -sh /data" 2>/dev/null | awk '{print $1}')
|
||||
echo "新卷 $NEW_VOL 数据量: $NEW_SIZE"
|
||||
echo "迁移完成!旧卷 $OLD_VOL 保留作为备份。"
|
||||
@@ -0,0 +1,5 @@
|
||||
ARG MYSQL_BASE_IMAGE=mysql:8.0.24
|
||||
FROM ${MYSQL_BASE_IMAGE}
|
||||
|
||||
ARG MYSQL_CONF=my.cnf.16c32g
|
||||
COPY ${MYSQL_CONF} /etc/mysql/conf.d/my.cnf
|
||||
@@ -0,0 +1,32 @@
|
||||
[mysqld]
|
||||
# ===== 网络 =====
|
||||
skip-host-cache
|
||||
skip-name-resolve
|
||||
|
||||
# ===== InnoDB 核心性能(16C/32G 服务器 / SSD) =====
|
||||
innodb_buffer_pool_size = 5G
|
||||
innodb_flush_method = O_DIRECT
|
||||
innodb_flush_log_at_trx_commit = 2
|
||||
innodb_log_file_size = 512M
|
||||
innodb_log_files_in_group = 2
|
||||
innodb_log_buffer_size = 32M
|
||||
innodb_io_capacity = 1000
|
||||
innodb_io_capacity_max = 4000
|
||||
innodb_read_io_threads = 4
|
||||
innodb_write_io_threads = 4
|
||||
|
||||
# ===== 禁用 binlog(无需主从复制) =====
|
||||
skip-log-bin
|
||||
|
||||
# ===== 连接数 =====
|
||||
max_connections = 200
|
||||
max_user_connections = 180
|
||||
|
||||
# ===== 临时表 =====
|
||||
tmp_table_size = 32M
|
||||
max_heap_table_size = 32M
|
||||
|
||||
# ===== 慢查询日志 =====
|
||||
slow_query_log = ON
|
||||
slow_query_log_file = /var/lib/mysql/slow.log
|
||||
long_query_time = 1
|
||||
@@ -0,0 +1,32 @@
|
||||
[mysqld]
|
||||
# ===== 网络 =====
|
||||
skip-host-cache
|
||||
skip-name-resolve
|
||||
|
||||
# ===== InnoDB 核心性能(32C/64G 服务器 / SSD) =====
|
||||
innodb_buffer_pool_size = 8G
|
||||
innodb_flush_method = O_DIRECT
|
||||
innodb_flush_log_at_trx_commit = 2
|
||||
innodb_log_file_size = 1G
|
||||
innodb_log_files_in_group = 2
|
||||
innodb_log_buffer_size = 64M
|
||||
innodb_io_capacity = 1000
|
||||
innodb_io_capacity_max = 4000
|
||||
innodb_read_io_threads = 8
|
||||
innodb_write_io_threads = 8
|
||||
|
||||
# ===== 禁用 binlog(无需主从复制) =====
|
||||
skip-log-bin
|
||||
|
||||
# ===== 连接数 =====
|
||||
max_connections = 300
|
||||
max_user_connections = 280
|
||||
|
||||
# ===== 临时表 =====
|
||||
tmp_table_size = 64M
|
||||
max_heap_table_size = 64M
|
||||
|
||||
# ===== 慢查询日志 =====
|
||||
slow_query_log = ON
|
||||
slow_query_log_file = /var/lib/mysql/slow.log
|
||||
long_query_time = 1
|
||||
@@ -0,0 +1,31 @@
|
||||
[mysqld]
|
||||
# ===== 网络 =====
|
||||
skip-host-cache
|
||||
skip-name-resolve
|
||||
|
||||
# ===== InnoDB 核心性能(开发环境) =====
|
||||
innodb_buffer_pool_size = 256M
|
||||
innodb_flush_log_at_trx_commit = 2
|
||||
innodb_log_file_size = 128M
|
||||
innodb_log_files_in_group = 2
|
||||
innodb_log_buffer_size = 8M
|
||||
innodb_io_capacity = 1000
|
||||
innodb_io_capacity_max = 2000
|
||||
innodb_read_io_threads = 4
|
||||
innodb_write_io_threads = 4
|
||||
|
||||
# ===== 禁用 binlog =====
|
||||
skip-log-bin
|
||||
|
||||
# ===== 连接数 =====
|
||||
max_connections = 30
|
||||
max_user_connections = 25
|
||||
|
||||
# ===== 临时表 =====
|
||||
tmp_table_size = 32M
|
||||
max_heap_table_size = 32M
|
||||
|
||||
# ===== 慢查询日志 =====
|
||||
slow_query_log = ON
|
||||
slow_query_log_file = /var/lib/mysql/slow.log
|
||||
long_query_time = 1
|
||||
@@ -0,0 +1,46 @@
|
||||
# Redis configuration file
|
||||
bind 0.0.0.0
|
||||
port 6379
|
||||
timeout 300
|
||||
tcp-keepalive 300
|
||||
daemonize no
|
||||
pidfile /var/run/redis.pid
|
||||
loglevel notice
|
||||
logfile stdout
|
||||
databases 16
|
||||
save 900 1
|
||||
save 300 10
|
||||
save 60 10000
|
||||
stop-writes-on-bgsave-error yes
|
||||
rdbcompression yes
|
||||
rdbchecksum yes
|
||||
dbfilename dump.rdb
|
||||
dir /data
|
||||
requirepass FireSkins@99999
|
||||
masterauth FireSkins@99999
|
||||
rename-command FLUSHDB ""
|
||||
rename-command FLUSHALL ""
|
||||
maxclients 10000
|
||||
maxmemory 1gb
|
||||
maxmemory-policy volatile-lru
|
||||
appendonly no
|
||||
appendfilename "appendonly.aof"
|
||||
appendfsync everysec
|
||||
no-appendfsync-on-rewrite no
|
||||
auto-aof-rewrite-percentage 100
|
||||
auto-aof-rewrite-min-size 64mb
|
||||
lua-time-limit 5000
|
||||
slowlog-log-slower-than 10000
|
||||
slowlog-max-len 128
|
||||
hash-max-listpack-entries 512
|
||||
hash-max-listpack-value 64
|
||||
list-max-listpack-size -2
|
||||
set-max-intset-entries 512
|
||||
set-max-listpack-entries 128
|
||||
set-max-listpack-value 64
|
||||
zset-max-listpack-entries 128
|
||||
zset-max-listpack-value 64
|
||||
client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 256mb 64mb 60
|
||||
client-output-buffer-limit pubsub 32mb 8mb 60
|
||||
hz 10
|
||||
@@ -0,0 +1,46 @@
|
||||
# Redis configuration file
|
||||
bind 0.0.0.0
|
||||
port 6379
|
||||
timeout 300
|
||||
tcp-keepalive 300
|
||||
daemonize no
|
||||
pidfile /var/run/redis.pid
|
||||
loglevel notice
|
||||
logfile stdout
|
||||
databases 16
|
||||
save 900 1
|
||||
save 300 10
|
||||
save 60 10000
|
||||
stop-writes-on-bgsave-error yes
|
||||
rdbcompression yes
|
||||
rdbchecksum yes
|
||||
dbfilename dump.rdb
|
||||
dir /data
|
||||
requirepass FireSkins@99999
|
||||
masterauth FireSkins@99999
|
||||
rename-command FLUSHDB ""
|
||||
rename-command FLUSHALL ""
|
||||
maxclients 10000
|
||||
maxmemory 2gb
|
||||
maxmemory-policy volatile-lru
|
||||
appendonly no
|
||||
appendfilename "appendonly.aof"
|
||||
appendfsync everysec
|
||||
no-appendfsync-on-rewrite no
|
||||
auto-aof-rewrite-percentage 100
|
||||
auto-aof-rewrite-min-size 64mb
|
||||
lua-time-limit 5000
|
||||
slowlog-log-slower-than 10000
|
||||
slowlog-max-len 128
|
||||
hash-max-listpack-entries 512
|
||||
hash-max-listpack-value 64
|
||||
list-max-listpack-size -2
|
||||
set-max-intset-entries 512
|
||||
set-max-listpack-entries 128
|
||||
set-max-listpack-value 64
|
||||
zset-max-listpack-entries 128
|
||||
zset-max-listpack-value 64
|
||||
client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 256mb 64mb 60
|
||||
client-output-buffer-limit pubsub 32mb 8mb 60
|
||||
hz 10
|
||||
@@ -0,0 +1,46 @@
|
||||
# Redis configuration file
|
||||
bind 0.0.0.0
|
||||
port 6379
|
||||
timeout 300
|
||||
tcp-keepalive 300
|
||||
daemonize no
|
||||
pidfile /var/run/redis.pid
|
||||
loglevel notice
|
||||
logfile stdout
|
||||
databases 16
|
||||
save 900 1
|
||||
save 300 10
|
||||
save 60 10000
|
||||
stop-writes-on-bgsave-error yes
|
||||
rdbcompression yes
|
||||
rdbchecksum yes
|
||||
dbfilename dump.rdb
|
||||
dir /data
|
||||
requirepass FireSkins@99999
|
||||
masterauth FireSkins@99999
|
||||
rename-command FLUSHDB ""
|
||||
rename-command FLUSHALL ""
|
||||
maxclients 10000
|
||||
maxmemory 128mb
|
||||
maxmemory-policy volatile-lru
|
||||
appendonly no
|
||||
appendfilename "appendonly.aof"
|
||||
appendfsync everysec
|
||||
no-appendfsync-on-rewrite no
|
||||
auto-aof-rewrite-percentage 100
|
||||
auto-aof-rewrite-min-size 64mb
|
||||
lua-time-limit 5000
|
||||
slowlog-log-slower-than 10000
|
||||
slowlog-max-len 128
|
||||
hash-max-listpack-entries 512
|
||||
hash-max-listpack-value 64
|
||||
list-max-listpack-size -2
|
||||
set-max-intset-entries 512
|
||||
set-max-listpack-entries 128
|
||||
set-max-listpack-value 64
|
||||
zset-max-listpack-entries 128
|
||||
zset-max-listpack-value 64
|
||||
client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 256mb 64mb 60
|
||||
client-output-buffer-limit pubsub 32mb 8mb 60
|
||||
hz 10
|
||||
@@ -0,0 +1,69 @@
|
||||
# Docker 基础设施
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
docker/
|
||||
├── compose/ # Docker Compose 文件 + 脚本
|
||||
│ ├── docker-compose.yml # 主文件 (MySQL + Redis + RabbitMQ)
|
||||
│ ├── docker-compose.cn.yml # 国内镜像源 override
|
||||
│ ├── docker-compose.dev.yml # 开发环境资源限制
|
||||
│ ├── docker-compose.16c32g.yml # 16C/32G 服务器资源规格
|
||||
│ ├── docker-compose.32c64g.yml # 32C/64G 服务器资源规格
|
||||
│ ├── deploy.sh # 智能部署脚本
|
||||
│ └── migrate-mysql-volume.sh # 数据卷迁移脚本
|
||||
├── config/ # 服务配置文件
|
||||
│ ├── mysql/
|
||||
│ │ ├── Dockerfile # 参数化 MySQL 镜像
|
||||
│ │ ├── my.cnf.dev # 开发环境配置
|
||||
│ │ ├── my.cnf.16c32g # 16C/32G 配置
|
||||
│ │ └── my.cnf.32c64g # 32C/64G 配置
|
||||
│ └── redis/
|
||||
│ ├── redis.dev.conf # 开发环境配置
|
||||
│ ├── redis.16c32g.conf # 16C/32G 配置
|
||||
│ └── redis.32c64g.conf # 32C/64G 配置
|
||||
└── readme.md # 本文件
|
||||
```
|
||||
|
||||
## 快速使用
|
||||
|
||||
```bash
|
||||
cd docker/compose
|
||||
|
||||
# 自动检测环境并启动(默认:国内镜像 + 自动检测 CPU 规格)
|
||||
./deploy.sh up -d
|
||||
|
||||
# 开发环境
|
||||
ENV=dev ./deploy.sh up -d
|
||||
|
||||
# 海外镜像源
|
||||
PROXY=overseas ./deploy.sh up -d
|
||||
|
||||
# 停止
|
||||
./deploy.sh stop
|
||||
|
||||
# 删除容器
|
||||
./deploy.sh down
|
||||
|
||||
# 重新创建某个容器
|
||||
./deploy.sh up -d --build --force-recreate rabbitmq
|
||||
```
|
||||
|
||||
## 环境变量
|
||||
|
||||
| 变量 | 默认值 | 说明 |
|
||||
|------|--------|------|
|
||||
| `ENV` | `prod` | `dev` 使用开发资源规格,`prod` 按 CPU 核数自动检测 |
|
||||
| `PROXY` | `cn` | `cn` 使用国内镜像源,`overseas` 使用官方源 |
|
||||
| `JVM_PROFILE` | (自动) | 可手动指定 `16c32g` 或 `32c64g` |
|
||||
|
||||
## 首次部署:数据卷迁移
|
||||
|
||||
如果之前使用旧版 docker-compose(自动命名卷),需要迁移数据到 external 卷:
|
||||
|
||||
```bash
|
||||
cd docker/compose
|
||||
bash migrate-mysql-volume.sh
|
||||
# 或手动指定旧卷名
|
||||
bash migrate-mysql-volume.sh docker_chengdu_mysql_data
|
||||
```
|
||||
Reference in New Issue
Block a user