Skip to content

Commit 52bf00f

Browse files
authored
Update docker-compose.yml
1 parent 0576f8c commit 52bf00f

1 file changed

Lines changed: 64 additions & 4 deletions

File tree

docker-compose.yml

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,161 @@
1+
# 定义一个 YAML 锚点,用于定义通用的日志配置,方便在多个服务中引用
12
x-logging: &default-logging
3+
# 使用 json-file 日志驱动,这是 Docker 的默认驱动
24
driver: json-file
35
options:
6+
# 设置单个日志文件的最大大小为 10M
47
max-size: "10m"
8+
# 设置最大日志文件数量为 5 个,达到上限后会进行轮转(删除最旧的日志文件)
59
max-file: "5"
610

711
services:
12+
# ======================================
13+
# 1. MySQL 数据库服务 (goj-mysql)
14+
# ======================================
815
goj-mysql:
16+
# 使用官方 MySQL 8.0 镜像
917
image: mysql:8.0
18+
# 容器名称
1019
container_name: goj-mysql
20+
# 重启策略:容器无论退出状态如何都会自动重启
1121
restart: always
1222
security_opt:
23+
# 禁用 seccomp 安全限制,有时能解决 MySQL 在容器内的一些权限问题 (可选, 默认不禁用)
1324
- seccomp:unconfined
25+
# 容器启动时执行的命令,用于配置 MySQL 运行参数
1426
command:
27+
# 设置默认认证插件,提高旧客户端兼容性
1528
- --default-authentication-plugin=mysql_native_password
29+
# 设置最大连接数
1630
- --max_connections=1024
31+
# 设置线程缓存大小
1732
- --thread_cache_size=256
33+
# 设置服务器字符集为 utf8mb4,支持全字符集
1834
- --character-set-server=utf8mb4
35+
# 设置服务器排序规则
1936
- --collation-server=utf8mb4_general_ci
37+
# 启用对 TIMESTAMP 类型的严格控制
2038
- --explicit_defaults_for_timestamp=true
39+
# 允许在存储过程和函数中使用不安全的 SQL
2140
- --log_bin_trust_function_creators=1
41+
# 环境变量,用于配置 MySQL 的初始化
2242
environment:
2343
- MYSQL_DATABASE=goj
2444
- MYSQL_USER=goj
2545
- MYSQL_PASSWORD=goj123456
2646
- MYSQL_ROOT_PASSWORD=root123456
2747
volumes:
48+
# 数据卷挂载:将宿主机上的具名卷 mysql_data 挂载到容器内的 MySQL 数据目录,实现数据持久化
2849
- mysql_data:/var/lib/mysql
2950
ports:
51+
# 端口映射:将宿主机的 3306 端口映射到容器的 3306 端口
3052
- "3306:3306"
3153
networks:
54+
# 加入 goj-network 网络
3255
- goj-network
56+
# 应用前面定义的日志配置
3357
logging: *default-logging
3458

59+
# ======================================
60+
# 2. Redis 缓存服务 (goj-redis)
61+
# ======================================
3562
goj-redis:
63+
# 使用基于 Alpine Linux 的轻量级 Redis 镜像
3664
image: redis:alpine
3765
container_name: goj-redis
3866
restart: always
67+
# 启动命令:开启 AOF(Append Only File)持久化
3968
command: redis-server --appendonly yes
4069
volumes:
70+
# 数据卷挂载:将宿主机上的具名卷 redis_data 挂载到容器内的 /data 目录,实现数据持久化
4171
- redis_data:/data
4272
ports:
73+
# 端口映射
4374
- "6379:6379"
4475
networks:
4576
- goj-network
4677
logging: *default-logging
4778

79+
# ======================================
80+
# 3. 判题服务 (goj-judge)
81+
# ======================================
4882
goj-judge:
83+
# 使用自定义的 goj-judge 镜像
4984
image: krisliu16/goj-judge:latest
5085
container_name: goj-judge
5186
restart: always
87+
# 赋予容器几乎所有权限,通常用于需要进行低级别系统操作或沙箱隔离的判题环境
5288
privileged: true
89+
# 设置共享内存大小为 512m (默认是 64m),判题过程可能需要更大的共享内存
5390
shm_size: 512m
5491
ports:
92+
# 端口映射
5593
- "5050:5050"
5694
networks:
5795
- goj-network
5896
logging: *default-logging
5997

98+
# ======================================
99+
# 4. 后端 API 服务 (goj-backend)
100+
# ======================================
60101
goj-backend:
102+
# 从本地路径 ./goj-backend 查找 Dockerfile 并构建镜像
61103
build: ./goj-backend
62104
container_name: goj-backend
63105
restart: always
106+
# 环境变量:配置后端服务连接其他组件的地址
64107
environment:
65-
- DB_HOST=goj-mysql
108+
- DB_HOST=goj-mysql # 数据库主机名为服务名 goj-mysql
66109
- DB_USER=goj
67110
- DB_PASSWORD=goj123456
68111
- DB_NAME=goj
69-
- REDIS_ADDR=goj-redis:6379
70-
- JUDGE_ADDR=http://goj-judge:5050
112+
- REDIS_ADDR=goj-redis:6379 # Redis 地址为服务名 goj-redis
113+
- JUDGE_ADDR=http://goj-judge:5050 # 判题服务地址为服务名 goj-judge
71114
ports:
115+
# 端口映射:宿主机 3000 -> 容器 3000
72116
- "3000:3000"
73117
volumes:
118+
# 挂载自定义数据卷(例如用于存储上传文件、配置文件等),使用相对路径
74119
- ./goj-backend/data:/app/data
120+
# 依赖服务:确保 goj-mysql 和 goj-redis 启动后,再启动 goj-backend
75121
depends_on:
76122
- goj-mysql
77123
- goj-redis
78124
networks:
79125
- goj-network
80126
logging: *default-logging
81127

128+
# ======================================
129+
# 5. 前端 Web 服务 (goj-frontend)
130+
# ======================================
82131
goj-frontend:
132+
# 从本地路径 ./goj-frontend 查找 Dockerfile 并构建镜像
83133
build: ./goj-frontend
84134
container_name: goj-frontend
85135
restart: always
86136
ports:
137+
# 端口映射:宿主机 80 端口(标准 HTTP)-> 容器 80 端口
87138
- "80:80"
139+
# 依赖服务:确保 goj-backend 启动后,再启动 goj-frontend
88140
depends_on:
89141
- goj-backend
90142
networks:
91143
- goj-network
92144
logging: *default-logging
93145

146+
# ======================================
147+
# 网络配置
148+
# ======================================
94149
networks:
150+
# 自定义网络 goj-network,用于连接所有服务
95151
goj-network:
152+
# 网络驱动:使用 bridge 驱动,这是默认的驱动类型,允许服务间通过服务名相互访问 (driver: bridge 可省略)
96153
driver: bridge
97154

155+
# ======================================
156+
# 卷(Volume)配置,用于数据持久化
157+
# ======================================
98158
volumes:
99159
mysql_data:
100160
redis_data:
101-
problem_data:
161+
problem_data:

0 commit comments

Comments
 (0)