深入解析testing-nestjs项目中的Docker Compose配置
2025-07-10 04:22:49作者:凤尚柏Louis
项目背景
testing-nestjs项目是一个用于演示NestJS框架与多种数据库集成的测试环境。该项目通过Docker Compose配置了完整的开发环境,让开发者能够快速搭建包含多种数据库服务的本地测试平台。
Docker Compose配置详解
该项目的docker-compose.yml文件定义了多个服务容器,每个容器都对应一种数据库类型,为NestJS应用提供了全面的数据库支持环境。
版本声明
version: '3'
使用Docker Compose文件格式版本3,这是目前广泛使用的稳定版本,支持大多数现代Docker功能。
数据库服务配置
1. Prisma专用的PostgreSQL服务
prisma-postgres:
image: postgres
ports:
- '5433:5432'
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=prisma
- 端口映射:5433→5432,避免与标准PostgreSQL端口冲突
- 环境变量:配置了默认用户(postgres)、密码(postgres)和数据库名称(prisma)
- 用途:专门为Prisma ORM工具提供PostgreSQL数据库支持
2. TypeORM专用的PostgreSQL服务
typeorm-postgres:
image: postgres
ports:
- '5432:5432'
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=typeorm
- 标准端口:5432→5432,使用PostgreSQL默认端口
- 环境变量:配置了与Prisma服务相同的认证信息,但数据库名称为typeorm
- 用途:为TypeORM提供独立的PostgreSQL数据库实例
3. Redis服务
redis:
image: redis
ports:
- '6379:6379'
- 标准配置:使用官方Redis镜像,暴露默认6379端口
- 用途:为应用提供缓存、会话存储或消息队列服务
4. MongoDB服务
mongodb:
image: mongo
ports:
- '27017:27017'
- 标准配置:使用官方MongoDB镜像,暴露默认27017端口
- 用途:为应用提供文档型数据库支持
5. MySQL服务
mysql:
image: mysql:5.7.31
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
ports:
- '3306:3306'
- 特定版本:使用MySQL 5.7.31版本
- 环境变量:配置root密码(root)和默认数据库(test)
- 标准端口:3306→3306
- 用途:为应用提供关系型数据库支持
技术要点解析
-
多数据库隔离:项目为不同的ORM工具(Prisma和TypeORM)配置了独立的PostgreSQL实例,避免了测试时的相互干扰。
-
端口规划:
- PostgreSQL标准端口(5432)分配给TypeORM
- 5433端口分配给Prisma
- 其他数据库使用各自的标准端口
-
版本控制:MySQL服务明确指定了5.7.31版本,确保测试环境的一致性。
-
最小化配置:每个服务只配置了必要参数,保持了配置的简洁性。
实际应用建议
-
开发环境搭建:直接运行
docker-compose up -d
即可启动所有数据库服务。 -
连接配置:在NestJS应用中,可以根据需要配置不同数据库的连接信息:
- Prisma PostgreSQL: localhost:5433
- TypeORM PostgreSQL: localhost:5432
- Redis: localhost:6379
- MongoDB: localhost:27017
- MySQL: localhost:3306
-
数据持久化:如需持久化数据,可以为每个服务添加volumes配置。
-
资源限制:在资源有限的开发机上,可以考虑添加资源限制参数。
扩展思考
这种多数据库的Docker Compose配置特别适合以下场景:
- 需要测试应用对不同数据库的兼容性
- 开发多数据源的应用
- 学习不同ORM工具的使用
- 进行数据库性能对比测试
通过这个配置,开发者可以轻松地在本地搭建一个包含多种数据库的完整测试环境,大大提高了开发效率。