【问题标题】:how to avoid manually copying csproj files in docker file如何避免在docker文件中手动复制csproj文件
【发布时间】:2022-01-13 07:05:14
【问题描述】:

我有多个具有多级嵌套的 dotnet 项目,我在下面为每个应用程序的 docker 文件指定每个 csproj 及其路径结构。

每当添加和删除项目时,所有 docker 文件都必须更新。

我可以避免它并制作一些通用的 docker 文件吗?

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY My.sln .

COPY ["Core/Events.csproj", "Core/"]
COPY ["Core/Infra/Services/Services.csproj", "Core/Infra/Services/"]
COPY ["Features/Feature.A.API/Feature.A.API.csproj", "Features/Feature.A.API/"]

RUN dotnet restore

COPY . .

【问题讨论】:

    标签: c# docker asp.net-core-webapi


    【解决方案1】:

    您可以将所有需要的项目存储在根目录中,我们称之为src 然后您只需使用主项目进行恢复/构建/发布(带有您的 asp .net 核心 webapi 的项目),所有其他来源构建期间所需的(依赖项)将存在(在 src 目录中),并具有正确的路径。

    例如:

    • src/Core/....
    • src/功能/...
    • src/Features/Feature.A.API/Dockerfile

    docker 文件将如下所示(aspnet 5.0):

    带占位符:

    • [API_DIR] 在你的情况下:Features/Feature.A.API/
    • [API_PROJECT] 在你的情况下:Feature.A.API
    FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
    WORKDIR /src
    COPY ["src/[API_DIR]/[API_PROJECT].csproj", "[API_DIR]/"]
    RUN dotnet restore "[API_DIR]/[API_PROJECT].csproj"
    COPY ["src/", "."]
    WORKDIR "src/[API_DIR]"
    RUN dotnet build "[API_PROJECT].csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "[API_PROJECT].csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "[API_PROJECT].dll"]
    

    从包含src 目录(这是您的构建上下文)的文件夹中运行它,使用:

    docker build src/Features/Feature.A.API/Dockerfile
    

    【讨论】:

    • 感谢您的回复@kraego。我担心的是,如果明天我添加了一个新功能Features/Feature.B.API/,那么我们必须再次在每个功能的 docker 文件中手动添加这些,如何避免呢?另外如何在Core文件夹或某个子文件夹中复制类库的项目引用?
    • 您好,这将有助于我理解:您的功能是什么?一个新的端点?一个新的微服务? ...这些功能如何协同工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2012-04-30
    相关资源
    最近更新 更多