我正在从这个 .NET Core 应用程序创建一个 Docker 容器,该应用程序在解决方案中有多个项目,我想知道将COPY
每个项目文件分开还是一行更好。
Visual Studio 生成一个 Dockerfile,它将每个项目文件复制到新的一行,如下所示:
WORKDIR /src
COPY Dir1/Dir1.csproj Dir1/
COPY Dir2/Dir2.csproj Dir2/
COPY Dir3/Dir4/Dir4.csproj Dir3/Dir4/
RUN dotnet restore Dir1/Dir1.csproj
但是,使用 Docker 创建 .NET 应用程序的 Microsoft文档显示为仅使用单个COPY
语句的“优化”,如下所示:
WORKDIR /src
COPY . .
RUN dotnet restore Dir1/Dir1.csproj
据说,根据我对文章的理解,创建一个更大的图像,但COPY
如果一个项目发生变化,则不必对所有其他项目。
有趣的是,Docker 文档提到
COPY
它们是单独的,而不是一次性的。这确保了每个步骤的构建缓存仅在特定需要的文件发生更改时才失效(强制重新运行该步骤)。
这基本上与微软文章所说的相矛盾,即COPY
当一个项目发生变化时必须重新运行该步骤。
我想知道哪个选项更好,为什么,或者出于什么目的。或者我可能误解了一些文档,那么请向我解释其中的区别。