.net - 默认的 netcore docker-compose 模板如何工作?

标签 .net visual-studio docker .net-core

这个问题在这里已经有了答案:





COPY . . command in Dockerfile for ASP.NET

(2 个回答)


3年前关闭。




我试图了解 docker 是如何工作的。今天我尝试 dockerise 我的 netcore 应用程序,所以我点击了 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文件。整个程序逻辑在哪里?它应该如何工作?我真的很努力学习它是如何工作的,但我就是想不通。

最佳答案

你有没有看到你不明白的部分后面的线条?它是

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

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

您指出的行是 docker 文件中的优化。 Docker 将查看文件和时间戳来决定哪些步骤需要重新运行。它缓存其余部分。每次重建时您的代码都可能发生变化,但您的项目文件变化很小。所以 docker 可以跳过每次构建的恢复。但是您的源代码会经常更改,因此它只会构建您的源代码,而不是在每次代码更改时恢复和重建您的源代码。

关于.net - 默认的 netcore docker-compose 模板如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52593703/

相关文章:

c# - 为什么我不能以相同的方式初始化对象(不使用 ref)?

.net - 可以锁定 (AppDomain.CurrentDomain)?

.net - double.Epsilon 与 std::numeric_limits<double>::min()

c - 合并 C Dll 的最简单方法。有来源

docker - 区域之间的 DigitalOcean 和 docker swarm

.NET WPF : Problems repeatedly calling WPF form from a WinForm application

visual-studio - Visual Studio 调试器获取数据提示

c# - 带括号的 HttpClient 自定义 header - C#

docker - Docker + WerckerCi:找不到标签

docker - 如何构建自定义 nginx :alpine based container listening on port other than 80?