Docker 与 .NetCore,我应该使用 SDK 还是运行时映像来实现微服务?

Zor*_*gis 3 docker asp.net-core

我对 docker 很陌生,我想知道。

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

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

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

在这种情况下是否值得获取运行时映像?

Chr*_*att 9

运行时镜像包含运行时,因此您不需要发布独立的。仅当您需要构建. 运行时拥有运行所需的一切。如果您要发布独立的版本,则只需要操作系统,因此您的基础映像将只是 alpine 等,而不是 ASP.NET Core(因为 ASP.NET Core 将包含应用程序中)。

然后,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"]
Run Code Online (Sandbox Code Playgroud)

每条FROM线代表一个新阶段。唯一幸存的是最后阶段,所要做的就是复制已发布的文件并运行应用程序,为您提供最佳尺寸的图像。但是,使用分阶段构建,构建和发布应用程序所需的所有逻辑都包含在映像中。