Visual Studio 如何使用 Dockerfile?

问题描述 投票:0回答:1

我正在尝试使用 React 创建一个简单的 ASP.NET Core Web 应用程序(使用“ASP.NET Core with React.js”模板)。此外,我想将其容器化。

如果我运行发布配置,一切正常。如果我运行调试配置,似乎环境变量未正确设置并且

npm
项目未设置。

据我研究,这是完全有道理的,因为在使用调试配置进行构建时,Visual Studio / MSBuild 不会执行所有阶段。

我尝试了以下步骤:

  • 添加
    <ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
  • 添加
    <DockerfileFastModeStage>final</DockerfileFastModeStage>
  • 删除所有 docker 镜像、卷和容器

我发现,我添加到 Base-Stage 的所有内容都将应用于调试容器。但这对我来说没有任何意义。

Visual Studio / MSBuild 使用的映像中实际包含哪些阶段?如果没有执行所有阶段,源代码如何传递到图像/容器中?如果只构建基础阶段,内部使用什么入口点?

我的 Dockerfile:

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y libpng-dev libjpeg-dev curl libxi6 build-essential libgl1-mesa-glx
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y libpng-dev libjpeg-dev curl libxi6 build-essential libgl1-mesa-glx
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs
COPY ["WebsiteLogos/WebsiteLogos.csproj", "WebsiteLogos/"]
RUN dotnet restore "WebsiteLogos/WebsiteLogos.csproj"
COPY . .
WORKDIR "/src/WebsiteLogos"
RUN dotnet build "WebsiteLogos.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebsiteLogos.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM node:16 AS build-web
COPY ./WebsiteLogos/ClientApp/package.json /WebsiteLogos/ClientApp/package.json
COPY ./WebsiteLogos/ClientApp/package-lock.json /WebsiteLogos/ClientApp/package-lock.json
WORKDIR /WebsiteLogos/ClientApp
RUN npm ci
COPY ./WebsiteLogos/ClientApp/ /WebsiteLogos/ClientApp
RUN npm run build

FROM base AS final
WORKDIR /app
ENV ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=Microsoft.AspNetCore.SpaProxy
COPY --from=publish /app/publish .
COPY --from=build-web /WebsiteLogos/ClientApp/build ./ClientApp/build
ENTRYPOINT ["dotnet", "WebsiteLogos.dll"]
docker visual-studio asp.net-core dockerfile msbuild
1个回答
0
投票

我自己想出来了。 MSBuild 生成一个额外的 obj/Docker/docker-compose.vs.debug.g.yml,它定义了这个东西。

Visual Studio / MSBuild 使用的映像中实际包含哪些阶段?

  • 目标图像是“基础”,因为这是在附加合成文件中指定的。

如果不是所有阶段都执行完毕,源代码是如何传递到镜像/容器中的?

  • 代码在本地编译并作为卷安装到容器中

如果只构建基础阶段,内部使用什么入口点?

  • 我不知道代码实际是如何执行的,但是在 docker-compose 文件中将入口点指定为“entrypoint: tail -f /dev/null”
© www.soinside.com 2019 - 2024. All rights reserved.