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

use*_*554 7 docker asp.net-core-2.1

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

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

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

我的问题是,microsoft / dotnet:2.1-runtime-nanoserver-1709,microsoft / dotnet:2.1-sdk和microsoft / dotnet:2.1-runtime有什么区别?.NET 2.1控制台应用程序应使用哪一个?我对我是(a)构建我的控制台应用程序然后将其部署到docker映像还是b)构建docker映像,获取代码并在映像本身上构建控制台应用程序感到困惑。任何帮助表示赞赏。

Mug*_*gen 8

对于任何对实际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"]
Run Code Online (Sandbox Code Playgroud)


bxN*_*xN5 2

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

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

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