如何在Docker中创建和运行.net Core Console App

时间:2018-08-09 14:14:14

标签: docker asp.net-core-2.1

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

这时,我有一个受Microsoft's Example启发的Dockerfile。我的文件实际上看起来像这样:

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映像,获取代码并在映像本身上构建控制台应用程序感到困惑。任何帮助表示赞赏。

5 个答案:

答案 0 :(得分:3)

对于对实际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"]

答案 1 :(得分:1)

更多的问题不是关于Docker本身,而是.net docker映像

您可以转到https://hub.docker.com/r/microsoft/dotnet/,在特定图像上单击以找到Dockerfile,并了解该图像中确切构建了什么软件,并找到不同Dockerfile之间的区别

关于第二个问题,更好的做法是“构建docker映像,获取代码,并在映像本身上构建控制台应用程序”。因此,您可以构建映像,公开端口,将代码作为卷安装,然后借助容器中安装的软件

在容器内部执行代码

答案 2 :(得分:0)

microsoft / dotnet:2.1-runtime-nanoserver-1709-此图像用于设置.net运行时,在其中运行任何.net应用程序。

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

请参考this blog,了解如何在Docker中创建和运行.net核心控制台应用程序:

答案 3 :(得分: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映像。 / p>

答案 4 :(得分:0)

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

我的docker文件如下:

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

这与您所做的差不多。

只是为了澄清先前的答案,您的dockerfile所做的是创建具有构建软件能力的“临时”映像。一旦构建完成,这些图像就会被废弃。

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