blob: 4d288a28a51dc6d9bc0b7508d690331b8af33363 [file] [log] [blame]
ZBDc7746b42025-05-10 01:42:30 +08001
ZBDf60356c2025-04-03 20:09:51 +08002services:
ZBDb704c9f2025-05-23 21:51:39 +08003 # 数据库服务
ZBDf60356c2025-04-03 20:09:51 +08004 mysql:
ZBDb704c9f2025-05-23 21:51:39 +08005 image: mysql:8.0 # 建议使用具体的版本号,而不是 latest
6 container_name: mysql_db # 给容器一个易于识别的名称
ZBDf60356c2025-04-03 20:09:51 +08007 environment:
ZBDb704c9f2025-05-23 21:51:39 +08008 MYSQL_DATABASE: mydatabase
9 MYSQL_USER: myuser
10 MYSQL_PASSWORD: secret
11 MYSQL_ROOT_PASSWORD: verysecret
ZBDf60356c2025-04-03 20:09:51 +080012 ports:
ZBDb704c9f2025-05-23 21:51:39 +080013 - "3306:3306" # 映射数据库端口,方便本地工具连接(可选,仅测试容器连接DB时可省略)
ZBDc7746b42025-05-10 01:42:30 +080014 volumes:
ZBDb704c9f2025-05-23 21:51:39 +080015 - mysql-data:/var/lib/mysql # 持久化数据库数据
16 # 添加健康检查,确保数据库服务真正可用
17 healthcheck:
18 test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u$$MYSQL_USER", "-p$$MYSQL_PASSWORD"]
19 interval: 10s # 每 10 秒检查一次
20 timeout: 5s # 检查超时时间
21 retries: 5 # 重试次数
22 start_period: 30s # 在此期间不计入重试失败次数,给数据库启动时间
ZBDc7746b42025-05-10 01:42:30 +080023
ZBDb704c9f2025-05-23 21:51:39 +080024 # 应用服务(使用 Dockerfile 的 runner 阶段)
ZBDc7746b42025-05-10 01:42:30 +080025 app:
26 build:
ZBDb704c9f2025-05-23 21:51:39 +080027 context: . # Dockerfile 所在的上下文路径
28 dockerfile: Dockerfile # Dockerfile 文件名
29 target: runner # 指定构建 Dockerfile 中的 runner 阶段
30 container_name: spring_app
ZBDc7746b42025-05-10 01:42:30 +080031 ports:
ZBDb704c9f2025-05-23 21:51:39 +080032 - "8080:8080" # 映射应用端口
ZBDc7746b42025-05-10 01:42:30 +080033 environment:
ZBDb704c9f2025-05-23 21:51:39 +080034 # 应用连接数据库的配置,使用数据库服务的名称作为主机名
35 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydatabase?serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=TRUE&useSSL=FALSE&allowPublicKeyRetrieval=TRUE
ZBDc7746b42025-05-10 01:42:30 +080036 SPRING_DATASOURCE_USERNAME: myuser
37 SPRING_DATASOURCE_PASSWORD: secret
ZBDb704c9f2025-05-23 21:51:39 +080038 # 其他 Spring Boot 配置...
ZBDc7746b42025-05-10 01:42:30 +080039 depends_on:
ZBDb704c9f2025-05-23 21:51:39 +080040 mysql:
41 condition: service_healthy # 确保数据库服务处于健康状态才启动应用
ZBDc7746b42025-05-10 01:42:30 +080042
ZBDb704c9f2025-05-23 21:51:39 +080043 # 测试服务(使用 Dockerfile 的 tester 阶段)
44 # 这个服务用于运行和调试需要连接数据库的测试
45 tester:
46 build:
47 context: . # Dockerfile 所在的上下文路径
48 dockerfile: Dockerfile # Dockerfile 文件名
49 target: tester # 指定构建 Dockerfile 中的 tester 阶段
50 container_name: tester
51 # 暴露调试端口,映射到主机端口,用于远程调试测试过程
52 ports:
53 - "5005:5005"
54 # 依赖于数据库服务,并等待其健康检查通过
55 depends_on:
56 mysql:
57 condition: service_healthy # 确保数据库服务处于健康状态才启动测试容器
58 environment:
59 # 测试环境连接数据库的配置,使用数据库服务的名称作为主机名
60 # 这些环境变量会覆盖 application-test.properties 中的相同配置
61 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydatabase?serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=TRUE&useSSL=FALSE
62 SPRING_DATASOURCE_USERNAME: myuser
63 SPRING_DATASOURCE_PASSWORD: secret
64 # 设置 Maven 运行时的额外 JVM 参数,用于开启远程调试
65 MAVEN_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
66 # 默认命令:保持容器运行,方便手动进入容器执行测试和调试
67 # 如果您希望容器启动后自动运行测试,可以修改此命令为 ["mvn", "test"]
68 command: tail -f /dev/null
69
70
71# 定义数据卷用于持久化数据库数据
ZBDc7746b42025-05-10 01:42:30 +080072volumes:
73 mysql-data:
ZBDb704c9f2025-05-23 21:51:39 +080074