Visual studio 如何使用docker compose(带调试)一起设置多个visual studio解决方案
在使用docker compose的单个解决方案中包含多个项目的问题似乎很多,但没有一个解决多个解决方案 为了设置场景,我们有多个.NET核心API,每个API都作为一个单独的VS2019解决方案。它们都需要能够使用(至少)本地运行的相同RabbitMQ容器,因为这将处理服务之间的所有通信 我已经能够通过以下方式使此设置在单个解决方案中工作:Visual studio 如何使用docker compose(带调试)一起设置多个visual studio解决方案,visual-studio,docker,.net-core,docker-compose,Visual Studio,Docker,.net Core,Docker Compose,在使用docker compose的单个解决方案中包含多个项目的问题似乎很多,但没有一个解决多个解决方案 为了设置场景,我们有多个.NET核心API,每个API都作为一个单独的VS2019解决方案。它们都需要能够使用(至少)本地运行的相同RabbitMQ容器,因为这将处理服务之间的所有通信 我已经能够通过以下方式使此设置在单个解决方案中工作: 正在为API项目添加“容器编排支持” 这在我的解决方案中创建了一个新的docker compose项目 更新docker-componse.yml以同时
- 正在为API项目添加“容器编排支持”
- 这在我的解决方案中创建了一个新的docker compose项目
- 更新docker-componse.yml以同时包含RabbitMQ和MongoDb映像(请参见下图-抱歉,我无法将其正确粘贴为文本/代码):
我有点期待这一点,但不知道最佳/正确的方式来正确配置这一点,任何帮助或建议将不胜感激 通过将
context
的值设置为适当的相对路径,我能够从多个解决方案组合多个服务。使用docker compose示例并添加我的另一个api项目,您最终会得到如下结果:
services:
my-api-project:
<as you have it currently>
my-other-api-project:
image: ${DOCKER_REGISTRY-}my-other-api-project
build:
context: ../my-other-api-project/ <-- Or whatever the relative path is to your other project
dockerfile: my-other-api-project/Dockerfile
ports:
- <your port mappings>
depends_on:
- some-mongo
- some-rabbit
some-rabbit:
<as you have it currently>
some-mongo:
<as you have it currently>
服务:
我的api项目:
我的另一个api项目:
图像:${DOCKER_REGISTRY-}我的其他api项目
建造:
上下文:../my other api project/,所以我想我会回答我自己的问题,因为我认为我最终找到了一个好的(不完美的)解决方案。我执行了以下步骤:
创建自定义docker网络
为我的RabbitMQ、SQL Server和MongoDB容器创建了一个docker-compose.yml(使用我的自定义网络)
为每个服务设置docker compose容器编排支持(右键单击API项目并选择添加容器编排)
上述步骤使用docker-compose.yml和docker-compose.override.yml在解决方案中创建docker compose项目
然后,我编辑docker-compose.yml,以便容器使用我的自定义docker网络,并专门指定端口号(因此它们始终相同)
我编辑了docker-compose.override.yml环境变量,以便连接字符串指向docker网络上的相关容器名称(即RabbitMQ、SQL Server和MongoDB)-无需再担心IP,当我在调试模式下使用docker compose project将解决方案设置为启动时,我的调试容器可以访问这些服务
现在我可以关闭VS解决方案并转到命令行,导航到解决方案文件夹并运行“docker compose up”启动容器
我按照步骤3-7设置每个VS解决方案,并且可以在本地启动任何/所有服务,而无需再打开VS(前提是我不需要调试)
当我需要调试/更改服务时,我会停止特定容器(即“docker container stop containerId”),然后在VS中打开解决方案,并在调试模式下启动它/进行更改等
如果我拉下任何其他人的更改,我将通过转到解决方案文件夹并运行“docker compose build”在命令行上重新构建相关容器
作为brucey的奖励,我编写了PowerShell脚本来启动所有容器,使用每个docker compose文件以及一个来构建它们,所以当我打开笔记本电脑时,我只需运行它,我的完整开发环境和10个服务就可以启动并运行了
在大多数情况下,这很有效,但需要注意的是:
- 我使用https和开发人员证书,有时情况不太好,我必须清理证书/重新信任它们,因为kestrel会抛出错误,并希望证书被信任,具有特定的名称和被信任。我正在努力改进这一点,但您不能在开发人员中本地使用https
- 如果您像我一样使用自己的nuget服务器,则需要一个nuget.config文件,并将其作为docker文件的一部分进行复制
这很酷,我会再仔细研究一下。最后我意识到,我可以为每个解决方案创建单独的docker compose文件(都在同一个自定义docker网络上),然后我编写了两个powershell脚本来启动每个解决方案(只需转到文件夹并调用“docker compose up-d”)还有一个是遍历每个文件夹并构建它们(如果我必须这样做的话)。在大多数情况下,它可以很好地处理不时发生的一些奇怪的事情。