这个问题在这里已经有了答案:
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/