代码之家  ›  专栏  ›  技术社区  ›  Alex Zhukovskiy

默认的netcore docker compose模板是如何工作的[[副本]

  •  1
  • Alex Zhukovskiy  · 技术社区  · 6 年前

    dockerize 按钮,它为我创建了以下Dockerfile:

    FROM microsoft/dotnet:2.0-runtime AS base
    WORKDIR /app
    
    FROM microsoft/dotnet:2.0-sdk AS build
    WORKDIR /src
    COPY MyProj.sln ./
    COPY MyProj.Console/MyProj.Console.csproj MyProj.Console/
    COPY MyProj.Core/MyProj.Core.csproj MyProj.Core/
    COPY MyProj.Solidity/MyProj.Solidity.csproj MyProj.Solidity/
    RUN dotnet restore -nowarn:msb3202,nu1503
    COPY . .
    WORKDIR /src/MyProj.Console
    RUN dotnet build -c Release -o /app
    
    FROM build AS publish
    RUN dotnet publish -c Release -o /app
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app .
    ENTRYPOINT ["dotnet", "MyProj.Console.dll"]
    

    FROM microsoft/dotnet:2.0-sdk AS build
    WORKDIR /src
    COPY MyProj.sln ./
    COPY MyProj.Console/MyProj.Console.csproj MyProj.Console/
    COPY MyProj.Core/MyProj.Core.csproj MyProj.Core/
    COPY MyProj.Solidity/MyProj.Solidity.csproj MyProj.Solidity/
    RUN dotnet restore -nowarn:msb3202,nu1503
    

    csproj 文件到输出目录,但我没有看到任何 cs 文件夹。整个程序逻辑在哪里?它应该怎么工作?我真的在努力学习它的工作原理,但我就是搞不懂。

    1 回复  |  直到 6 年前
        1
  •  1
  •   omajid    6 年前

    你看到你不懂的部分后面的线条了吗?它是

    COPY . .
    WORKDIR /src/MyProj.Console
    RUN dotnet build -c Release -o /app
    

    您指出的部分复制项目文件,然后执行还原。这些行复制其余的源代码并进行生成。该构建包含一个隐式还原,由于还原已经完成,因此该操作将变为不操作。

    您指出的行是docker文件中的优化。Docker将查看文件和时间戳来决定哪些步骤需要重新运行。剩下的都藏起来了。很可能每次重建时代码都会发生更改,但项目文件的更改很少。所以docker可以跳过每个构建的恢复。但是您的源代码会经常更改,因此它只会构建您的源代码,而不会执行恢复