码头工人与 .NetCore,我应该将 SDK 或运行时映像用于微服务吗?



我是docker新手,我想知道。

当您使用许多微服务 (50+) 时。使用运行时映像与 SDK 映像是否仍然相关?

为了使用运行时映像,我需要执行一个独立的发布,大约大约 100MO 大。

拥有 50 个微服务,拥有独立的应用程序是 5GO 的数据。

在这种情况下,使用运行时映像是否值得?

运行时映像包含运行时,因此无需发布自包含映像。仅当需要构建时才需要 SDK。运行时具有运行所需的一切。如果你发布的是自包含的,你只需要操作系统,所以你的基础映像只是阿尔卑斯山或其他东西,根本不 ASP.NET 核心(因为 ASP.NET 核心将包含在应用程序中)。

然后,Docker已经分阶段构建。因此,执行此操作的典型方法是在不同的阶段构建和发布映像中的所有内容。最终映像基于最后一个阶段,因此这是引用运行时映像的位置。例如:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["MyProject/MyProject.csproj", "MyProject/"]
RUN dotnet restore "MyProject/MyProject.csproj"
COPY . .
WORKDIR "/src/MyProject"
RUN dotnet build "MyProject.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "MyProject.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.dll"]

每条FROM线表示一个新阶段。唯一幸存下来的是最后阶段,所做的只是复制已发布的文件并运行应用程序,为您提供最佳大小的图像。但是,使用暂存生成时,生成和发布应用所需的所有逻辑都包含在映像中。

最新更新