热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Dockerfile中正确使用dotnetrestore

如何解决《如何在Dockerfile中正确使用dotnetrestore》经验,为你挑选了1个好方法。

将Docker支持添加到ASP.NET Core项目中时,VS(15.9.2)将添加一个默认的Dockerfile来进行还原,构建和发布。但是,不仅将所有文件复制到Docker构建容器中,它还仅复制proj文件,进行还原,然后在构建之前复制其余文件。我想知道为什么要这样做吗?与仅直接复制所有文件然后进行还原有何不同?

这种方法的问题在于,解决方案中的所有proj文件都需要分别复制,并且如果项目真的很大,并且不时添加和删除项目,则很难保持Dockerfile与之同步。我只想知道为什么要这样做,而复制所有内容是否也一样?

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["Temp2/Temp2.csproj", "Temp2/"]
COPY ["Temp3/Temp3.csproj", "Temp3/"]
RUN dotnet restore "Temp2/Temp2.csproj"
COPY . .
WORKDIR "/src/Temp2"
RUN dotnet build "Temp2.csproj" -c Release -o /app

要么

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY . .
RUN dotnet restore "Temp2/Temp2.csproj"
WORKDIR "/src/Temp2"
RUN dotnet build "Temp2.csproj" -c Release -o /app

Kirk Larkin.. 5

Docker构建映像时,会维护一个构建缓存:

构建映像时,Docker会逐步执行Dockerfile中的指令,并以指定的顺序执行每个指令。在检查每条指令时,Docker会在其缓存中查找可重用的现有映像,而不是创建新的(重复的)映像。

重要的是,ADDCOPY指令得到特殊处理:

对于ADDCOPY指令,将检查图像中文件的内容,并为每个文件计算一个校验和。在这些校验和中不考虑文件的最后修改时间和最后访问时间。在高速缓存查找期间,将校验和与现有映像中的校验和进行比较。如果文件中的任何内容(例如内容和元数据)发生了更改,则缓存将无效。

在构建.NET Core解决方案时,我们可以确保在运行之后dotnet restoredotnet restore仅当.csproj文件已更改(例如,添加了新包或版本)后,再次运行的结果才会更改。

通过将.csproj文件分别复制到映像中,我们可以利用Docker的构建缓存,这意味着只要.csproj文件没有更改,dotnet restore就不会在每次重建映像时不必要地重新执行该步骤。



1> Kirk Larkin..:

Docker构建映像时,会维护一个构建缓存:

构建映像时,Docker会逐步执行Dockerfile中的指令,并以指定的顺序执行每个指令。在检查每条指令时,Docker会在其缓存中查找可重用的现有映像,而不是创建新的(重复的)映像。

重要的是,ADDCOPY指令得到特殊处理:

对于ADDCOPY指令,将检查图像中文件的内容,并为每个文件计算一个校验和。在这些校验和中不考虑文件的最后修改时间和最后访问时间。在高速缓存查找期间,将校验和与现有映像中的校验和进行比较。如果文件中的任何内容(例如内容和元数据)发生了更改,则缓存将无效。

在构建.NET Core解决方案时,我们可以确保在运行之后dotnet restoredotnet restore仅当.csproj文件已更改(例如,添加了新包或版本)后,再次运行的结果才会更改。

通过将.csproj文件分别复制到映像中,我们可以利用Docker的构建缓存,这意味着只要.csproj文件没有更改,dotnet restore就不会在每次重建映像时不必要地重新执行该步骤。


推荐阅读
author-avatar
陈hancox_894
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有