【发布时间】:2019-09-04 09:45:15
【问题描述】:
我正在实现一个由多个服务组成的应用程序,其中服务是“独立”的 ASP.NET Core 项目。这意味着每个服务都有自己的 Github 存储库,并且是独立开发和测试的。
应用程序运行在使用 K8s 编排服务的集群上。
服务依赖于常见的容器/服务,例如 RabbitMQ 和 SQL Server。在所有服务都使用 K8s 编排的生产环境中,一切都很好;然而,挑战在于建立开发环境。
我想开发/测试一项服务,而不必启动整个应用程序。比如开发依赖RabbitMQ和SQL Server的ServiceA,并监听ServiceB事件,我只想启动ServiceA、RabbitMQ、SQL Server和ServiceB。这是我的工作:
- 克隆
ServiceBrepo,并使用它的docker-compose来启动服务。此时,docker compose 启动RabbitMQ和SQL Server、ServiceB容器,ServiceB能够发布事件并将种子数据持久化到数据库中。 - 克隆
ServiceArepo,并使用它的docker-compose来启动服务。理想情况下,我希望 docker-compose 重用RabbitMQ和SQL Server,并启动ServiceA容器,因此ServiceA可以监听使用ServiceB发布的事件。
当为ServieA 运行 docker-compose 时,它通过一个错误来抱怨端口(用于RabbitMQ 和SQL Server)已经分配。
因此,我想我错过了可以设置不同服务的 docker-compose 以重用彼此资源或类似的步骤。对于这种情况,推荐的设置是什么?
更新 1
一些目标是:
- 在开发人员机器和 CI 环境上启用运行/开发集成测试,而无需复制生产环境;
- 使开发人员能够为他们正在开发的服务启动一个相互关联的服务环境。
需要考虑的一点是,在某些情况下(包括我的情况),期望开发人员复制生产设置以用于开发目的可能不是不切实际的;因为您可能在生产环境中使用了一些开发人员无法使用的服务。例如,我们在生产环境中使用付费数据库服务,但想在开发环境中使用本地/免费数据库服务。
更新 2
为了加快开发速度,我们正在考虑一种集成测试设置,开发人员可以在其中测试相互关联的服务子集之间的集成,因为为不同的集成测试运行整个应用程序需要大量时间(约 1 小时) ,我们认为这是快速发展的负担。
【问题讨论】:
标签: c# docker asp.net-core docker-compose