【问题标题】:How to create Dockerfile for multi-project .NET Core WebAPI?如何为多项目 .NET Core WebAPI 创建 Dockerfile?
【发布时间】:2020-10-14 02:14:14
【问题描述】:

我有一个典型的 .NETCore WebAPI 项目结构:

TestApi
  |--- src
    |--- TestApi.Domain
    |--- TestApi.Infrastructure
    |--- TestApi.WebApi
      |--- TestApi.WebApi.csproj <--- Startup project
  |--- tests
  |--- TestApi.sln

我应该把我的Dockerfile 文件放在哪里?我认为约定是将其与 TestApi.WebApi.csproj (主项目)放在同一级别,但是我如何COPY 域和基础设施项目一起?

可以在 .sln 级别创建 Dockerfile 吗?这是一个好习惯吗?

谢谢!

【问题讨论】:

  • 您可以根据需要在解决方案文件夹中创建文件。然后手动将它们添加到解决方案中。但由于 WebApi 是正在运行的项目,因此在 WebApi 项目中创建 Dockerfile 是有意义的

标签: docker asp.net-core dockerfile containers asp.net-core-webapi


【解决方案1】:

很大程度上取决于您的具体情况,因此很难提供准确的建议。

简而言之,在 .sln 级别,甚至在源存储库的根目录中包含 Dockerfile 是可以接受的。作为一般做法,大多数使用 docker 的开发人员更喜欢将 Dockerfile 保留在 docker 构建上下文的工作目录中。我建议您阅读以下有关 docker build 的指南:

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#understand-build-context

您的构建可以使用COPY 指令来引用上下文中的文件。因此,如果您想在docker build 期间将解决方案中的多个项目COPY 保存到您的映像中,那么您应该将Dockerfile 保存在包含所有需要包含的项目的父目录中。

您可能会从 github 上的这个 dotnet docker 示例存储库中受益,为您提供一些关于您的 repo 结构的想法:

https://github.com/dotnet/dotnet-docker/tree/master/samples/aspnetapp

我还建议您阅读有关如何使用.dockerignore 从图像中排除文件的信息。这将帮助您最小化最终图像的大小。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    相关资源
    最近更新 更多