docker - 带有.NetCore的Docker,我应将SDK或运行时镜像用于微服务吗?

标签 docker asp.net-core

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

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

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

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

在这种情况下,获取运行时镜像值得吗?

最佳答案

运行时镜像包含运行时,因此您无需发布独立的。仅在需要构建时才需要SDK。运行时具有运行所必需的一切。如果要发布自包含文件,则只需要操作系统,因此您的基本镜像将是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"]

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

关于docker - 带有.NetCore的Docker,我应将SDK或运行时镜像用于微服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57098268/

相关文章:

docker - 使用 Kubernetes 和 Docker Desktop for Windows 设置持久卷

c# - Jwt 无法有效发布者或受众

c# - 在 ASP.NET 5 中获取访问 token

asp.net-core - 使用 GITLAB CI/CD 将 ASP.NET Core 发布到 IIS

c# - 如何在 grpc 中返回 list<model>

java - 无法从文件(Docker)打开指定的文件输入流

node.js - Docker compose 无法正确复制文件来运行 React 应用程序

docker - 谁能让我知道我的docker文件中的问题是什么?

python - 在 Docker 容器中找不到共享库 libpython3.5(但覆盖工作正常)

c# - 使用 asp.net core mvc 中的身份验证保护 wwwroot 中的某些文件夹