代码之家  ›  专栏  ›  技术社区  ›  Martin Lottering

为什么我们要构建和发布为两个步骤,而发布也要构建?

  •  0
  • Martin Lottering  · 技术社区  · 6 年前

    抱歉,如果这是一个愚蠢的问题,那么为什么dockerfile在构建发布时还包含构建和发布步骤?

    以下dockerfile是在我的Web应用程序中创建的:

    FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
    WORKDIR /app
    EXPOSE 80
    
    FROM microsoft/dotnet:2.1-sdk AS build
    WORKDIR /src
    COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
    RUN dotnet restore "WebApplication1/WebApplication1.csproj"
    COPY . .
    WORKDIR "/src/WebApplication1"
    RUN dotnet build "WebApplication1.csproj" -c Release -o /app
    
    FROM build AS publish
    RUN dotnet publish "WebApplication1.csproj" -c Release -o /app
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "WebApplication1.dll"]
    
    2 回复  |  直到 5 年前
        1
  •  0
  •   Vignesh D    6 年前

    当我们 在我们的代码中添加一些引用/服务/实体 当部分完成的代码需要调试时。在调试模式下,每次需要用build编译时,当代码100%完成时,不需要编译。通过发布直接生成。

        2
  •  -1
  •   Roy Scheffers suresh sunkari    5 年前

    根据这本书 .NET Microservices: Architecture for Containerized .NET Applications (Microsoft EBook) , 第一个构建指令是冗余的 因为publish指令也会生成,它就在第一条生成指令之后。第94(86)页,第10行。

    这是这本书的一个简短摘录:

    1 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
    2 WORKDIR /app
    3 EXPOSE 80
    4
    5 FROM microsoft/dotnet:2.1-sdk AS build
    6 WORKDIR /src
    7 COPY src/Services/Catalog/Catalog.API/Catalog.API.csproj …
    8 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks …
    9 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks …
    10 COPY src/BuildingBlocks/EventBus/IntegrationEventLogEF/ …
    11 COPY src/BuildingBlocks/EventBus/EventBus/EventBus.csproj …
    12 COPY src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj …
    13 COPY src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj …
    14 COPY src/BuildingBlocks/WebHostCustomization/WebHost.Customization …
    15 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions …
    16 COPY src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions …
    17 RUN dotnet restore src/Services/Catalog/Catalog.API/Catalog.API.csproj
    18 COPY . .
    19 WORKDIR /src/src/Services/Catalog/Catalog.API
    20 RUN dotnet build Catalog.API.csproj -c Release -0 /app
    21
    22 FROM build AS publish
    23 RUN dotnet publish Catalog.API.csproj -c Release -0 /app
    24
    25 FROM base AS final
    26 WORKDIR /app
    27 COPY --from=publish /app
    28 ENTRYPOINT ["dotnet", "Catalog.API.dll"]
    

    对于最终的优化,恰好20行是多余的, 因为第23行也构建了应用程序,本质上是正确的 在第20行之后,还有一个耗时的命令。