在一个 .NET 解决方案中拥有多个 dockerfile 的最佳方式是什么?

What's the best way to have multiple dockerfiles in one .NET solution?

假设我在一个解决方案中有多个 WebApi 项目。还有一些常见项目是 class 库(核心、数据访问),所有这些 Web api 都有对那些 class 库的项目引用。我想在每个 api 中都有一个单独的 Dockerfile,但由于它们具有这些项目引用,因此变得复杂。 Microsoft 解决此问题的方法(当您启用 docker 支持时)是他们使用在解决方案根级别设置的上下文构建 Dockerfile。问题在于所有内容都被复制到图像中,包括其他 api 代码。如果您尝试手动复制您需要的内容,那么就 docker 文件的相关性而言,路径会变得很奇怪,因为上下文设置为解决方案根级别,而不是 Dockerfile 级别。如果您在 Dockerfile 级别(您的 Dockerfile 所在的路径)执行构建命令,那么您无权访问外部引用的项目。将引用的项目安装为卷还有一些其他解决方法,但所有这些方法都有一些缺点。那么对于这个问题,哪种解决方案最干净?

如果您进行多阶段构建,其中 dotnet build 您想要的 webapi 的 .csproj 文件,那么将太多源代码复制到构建阶段并不重要。

只会构建 webapi 及其依赖项目,因此您只会在最终映像中获得所需内容。