hcp*_*hcp 8 c# visual-studio docker .net-core asp.net-core
VisualStudio 为 .NET Core 生成 Dockerfile,如下所示:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["src/Sandbox/Sandbox.csproj", "src/Sandbox/"]
RUN dotnet restore "src/Sandbox/Sandbox.csproj"
COPY . .
WORKDIR "/src/src/Sandbox"
RUN dotnet build "Sandbox.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Sandbox.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Sandbox.dll"]
Run Code Online (Sandbox Code Playgroud)
SDK 分为三个不同的步骤:
看起来它可以简化为一个publish
阶段并得到如下所示的结果:
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS publish
WORKDIR /src
COPY . .
RUN dotnet publish "src/Sandbox/Sandbox.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Sandbox.dll"]
Run Code Online (Sandbox Code Playgroud)
这种步骤分离是否是必要的,以便将来更容易自定义每个步骤,或者是否有其他原因这样做?
看起来他们正在尝试通过使用 docker 缓存和分层来优化事物。
将恢复与构建/发布分开是一个好主意。您的代码经常更改,但项目文件和依赖项变化很少。Docker 对不会改变的东西使用缓存。如果您可以将项目文件与其余代码分开,则可以缓存“恢复”操作并使将来的构建速度更快。
有关其工作原理的更多信息,请参阅docker 文档中的构建缓存。
我不确定这会给你带来什么:
RUN dotnet build "Sandbox.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Sandbox.csproj" -c Release -o /app/publish
Run Code Online (Sandbox Code Playgroud)
我觉得发布可以合并到前一阶段。我肯定错过了什么。
编辑:进一步思考,也许这可以让您在自定义发布方式时(再次!)使用缓存?
例如,如果您想以独立模式发布,或者以不同的运行时 ID 为目标,则只需更改发布命令而不是构建命令。如果您的应用程序很大,这可能会节省您一些时间。
归档时间: |
|
查看次数: |
2662 次 |
最近记录: |