如何在docker中创建和运行.net Core控制台应用程序

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

我有一个 .NET Core 2.1 控制台应用程序。我想在 Docker 映像中运行此控制台应用程序。我是 Docker 新手,只是想弄清楚它。

此时,我有了一个 Dockerfile,它的灵感来自于 Microsoft 的示例。我的文件实际上看起来像这样:

FROM microsoft/dotnet:2.1-runtime-nanoserver-1709 AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk-nanoserver-1709 AS build
WORKDIR /src
COPY MyConsoleApp/MyConsoleApp.csproj MyConsoleApp/
RUN dotnet restore MyConsoleApp/MyConsoleApp.csproj
COPY . .
WORKDIR /src/MyConsoleApp
RUN dotnet build MyConsoleApp.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish MyConsoleApp.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyConsoleApp.exe"]

我的问题是,microsoft/dotnet:2.1-runtime-nanoserver-1709、microsoft/dotnet:2.1-sdk 和 microsoft/dotnet:2.1-runtime 之间有什么区别?我的 .NET 2.1 控制台应用程序应该使用哪一个?我很困惑是否 a) 构建我的控制台应用程序,然后将其部署到 docker 映像,或者 b) 构建 docker 映像,获取代码,并在映像本身上构建控制台应用程序。如有任何帮助,我们将不胜感激。

docker asp.net-core-2.1
6个回答
14
投票

对于任何对实际

Dockerfile
感兴趣的人参考:

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /app

COPY <your app>.csproj .
RUN dotnet restore <your app>.csproj

COPY . .
RUN dotnet publish -c Release -o out

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build /app/out ./

ENTRYPOINT ["dotnet", "<your app>.dll"]

2
投票

这不是关于 docker 本身的问题,而是关于 .net docker 镜像的问题

您可以访问 https://hub.docker.com/r/microsoft/dotnet/ 单击特定图像查找 Dockerfile,了解此图像中软件到底构建了什么,并找到不同 Dockerfile 之间的差异

关于第二个问题,最好“构建一个 docker 镜像,获取代码,并在镜像本身上构建控制台应用程序”。因此,您构建映像,公开端口,将代码安装为卷,并且您的代码在容器中安装的软件的帮助下在容器内执行


0
投票

microsoft/dotnet:2.1-runtime-nanoserver-1709 - 此映像用于设置 .net 运行时,任何 .net 应用程序都可以在该运行时运行。

microsoft/dotnet:2.1-sdk-nanoserver-1709 - 此图像是用于编译 .net core 应用程序的 SDK

请参阅此博客了解如何在 docker 中创建和运行 .net core 控制台应用程序:


0
投票

我对第一个问题的回答是:

microsoft/dotnet:2.1-runtime-nanoserver-1709
是一个可以运行.net core应用程序的docker镜像,

并且

microsoft/dotnet:2.1-sdk-nanoserver-1709
是您构建应用程序的docker镜像,您也可以用它来运行应用程序。

我对第二个问题的回答是:

如果您只想在 docker 中运行应用程序,请在本地计算机上使用 Visual Studio 构建应用程序(这将是构建它的最简单方法),使用

microsoft/dotnet:2.1-runtime-nanoserver-1709
构建 docker 映像。


0
投票

我在 Github 上放了一个关于如何为 .net core webapi 应用程序执行此操作的示例,因此对于控制台应用程序应该几乎相同。

我的 docker 文件如下所示:

https://github.com/MikeyFriedChicken/MikeyFriedChicken.DockerWebAPI.Example

这和你的几乎一样。

为了澄清之前的答案,您的 dockerfile 正在做的是创建能够构建软件的“临时”映像。一旦全部建成,这些图像就会被废弃。

如果您查看 dockerfile 中的最后几行,您可以看到它将构建映像的输出复制到基于“microsoft/dotnet:2.1-runtime-nanoserver-1709”的最终映像,该映像具有足够的库和依赖项用于运行您的 .net core 应用程序。


0
投票

对于 .NET 7,以下代码有效

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /source

COPY <your app name>.csproj .
RUN dotnet restore <your app name>.csproj

COPY . .
RUN dotnet publish -c Release -o out

FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app/out ./

ENTRYPOINT ["dotnet", "<your app name>.dll"]
© www.soinside.com 2019 - 2024. All rights reserved.