首页
/ Wild Workouts Go DDD 示例项目中的Docker Compose架构解析

Wild Workouts Go DDD 示例项目中的Docker Compose架构解析

2025-07-07 08:27:48作者:霍妲思

项目概述

Wild Workouts是一个基于Go语言实现的健身应用示例项目,采用领域驱动设计(DDD)架构。该项目通过Docker Compose文件展示了如何组织和管理多个微服务及其依赖项。

Docker Compose文件结构分析

该docker-compose.yml文件定义了一个完整的微服务系统,包含以下核心组件:

1. 前端服务(web)

web:
  build:
    context: docker/web
    dockerfile: Dockerfile
  working_dir: /web
  volumes:
    - ./web:/web
    - /web/node_modules/
  ports:
    - "127.0.0.1:8080:8080"
  • 使用独立的Dockerfile构建前端应用
  • 采用卷映射实现开发环境的热重载
  • 隔离node_modules目录避免主机与容器冲突
  • 暴露8080端口供本地访问

2. 微服务架构

项目包含多个微服务,每个服务都有HTTP和gRPC两种接口形式:

训练师服务(trainer)

  • HTTP接口:3000端口
  • gRPC接口:3010端口

训练服务(trainings)

  • HTTP接口:3001端口

用户服务(users)

  • HTTP接口:3002端口
  • gRPC接口:3020端口

所有Go服务共享以下配置特点:

  • 使用相同的应用构建上下文(docker/app)
  • 挂载内部代码目录实现开发热重载
  • 配置Go模块缓存和构建缓存提高构建效率
  • 依赖Firestore数据库服务

3. 数据存储服务

Firestore模拟器

firestore:
  build:
    context: docker/firestore-emulator
  ports:
    - "127.0.0.1:8787:8787"
    - "127.0.0.1:4000:4000"
  • 提供本地开发用的Firestore模拟环境
  • 8787端口用于管理界面
  • 4000端口用于API访问

MySQL数据库

mysql:
  image: mariadb:10
  volumes:
    - ./sql/schema.sql:/docker-entrypoint-initdb.d/schema.sql
  ports:
    - "127.0.0.1:3306:3306"
  • 使用MariaDB 10镜像
  • 自动执行提供的SQL模式初始化脚本
  • 标准MySQL 3306端口

环境配置与依赖管理

所有服务都支持.env文件配置:

env_file:
  - .env

关键环境变量包括:

  • GOCACHE:控制Go构建缓存位置
  • SERVER_TO_RUN:决定服务启动HTTP还是gRPC接口
  • 各种数据库连接配置

开发环境最佳实践

  1. 依赖隔离:每个服务都有明确的依赖声明,如depends_on确保数据库先启动

  2. 构建优化

    • 共享Go模块缓存(.go/pkg)
    • 独立Go构建缓存(.go-cache)
  3. 端口管理

    • 所有服务都绑定到127.0.0.1,避免意外暴露到网络
    • 端口分配清晰有序(3000系列)
  4. 热重载支持

    • 前端:直接映射源码目录
    • 后端:映射internal目录

部署考量

虽然这是一个开发环境配置,但体现了生产环境的多个重要原则:

  1. 服务分离:不同功能拆分为独立服务
  2. 接口多样性:同时支持HTTP和gRPC
  3. 数据持久化:数据库服务配置了自动重启策略
  4. 配置集中管理:通过.env文件统一配置

总结

这个Docker Compose配置展示了如何在开发环境中组织一个基于DDD的Go微服务项目。它清晰地划分了服务边界,提供了高效的开发工作流,同时保持了接近生产环境的架构设计。对于学习现代Go微服务开发的工程师来说,这是一个非常有参考价值的实例。