asp.net - 复制 。 .用于 ASP.NET 的 Dockerfile 中的命令

标签 asp.net docker dockerfile

Docker 的 Visual Studio 工具为 ASP.NET 项目创建一个 Dockerfile,其中包含 COPY . .命令如下:

WORKDIR /src
COPY *.sln ./
...
COPY . .

根据我的阅读,<src>参数是相对于上下文的,因此不受 WORKDIR /src 的影响命令。 <dest>然而是相对于 WORKDIR所以将指向/src .

此命令是否只是从根目录中提取剩余文件进行打包(docker-compose.yml、.dockerignore 等)?如果是这样,那为什么要在 RUN dotnet build... 之前完成?命令?

完整的 Dockerfile 如下:

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY *.sln ./
COPY MyProject/MyProject.csproj MyProject/
RUN dotnet restore
COPY . . # The line mentioned above
WORKDIR /src/MyProject
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", "MyProject.dll"]

最佳答案

复制。 . 将整个项目以递归方式复制到构建容器中。

前 2 个 COPY 命令与 dotnet restore 和完整的 COPY 分开的原因。 .dotnet build 是一种 Docker 缓存技巧,用于加快容器镜像的构建。这样做是为了在每次更改代码时都不需要重新安装项目依赖项。

Docker images are built in layers . Docker 将构成每个新层的内容和指令与以前的构建进行比较。如果它们与现有层的 SHA256 校验和匹配,则可以跳过该层的构建步骤。

代码的变化比依赖项要多得多,现在依赖项通常是从一个慢(ish)网络中获取的。如果在依赖项安装完成后复制代码,则不会因其他更改而破坏缓存的依赖项层。

这是一个跨多种语言的通用主题,带有依赖项管理器。 Go、Python、Node.js 等。Node.js 等效项在其余应用程序内容之前执行 package.jsonpackage-lock.json:

WORKDIR /app
COPY package.json package-lock.json /app/
RUN npm install
COPY . /app/
CMD ["node", "app/index.js"]

关于asp.net - 复制 。 .用于 ASP.NET 的 Dockerfile 中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47270150/

相关文章:

c# - 在 asp.net/C# 中使用 LinqToSql 对 row_number 进行排序

selenium - docker run -v bindmount 失败

ubuntu - Minikube 服务 URL 无效

docker - 使用 docker-compose 和多阶段 Dockerfile 共享构建逻辑

java - 使用 Dockerfile 将 excel (.xls) 文件复制到容器

c# - 运行 DELETE SQL 查询后 ASP.NET 页面不刷新

c# - Asp.net 用户登录计数和 LastLogin

asp.net - 使用 NuGet 的 SignalR 问题

Apache 403 Forbidden 您无权访问/在此服务器上

docker - 您可以控制Dockerfile中的Docker运行参数吗