如何在Docker dotnet框架映像上使用dotnet核心

时间:2019-11-14 06:26:31

标签: asp.net docker asp.net-core docker-for-windows

按照标题,我想在dotnet框架的aspnet图像上使用dotnet核心。有一点背景知识,我有带dotnet核心库的ASP.NET(4.6)应用程序。当前它正在IIS上运行。现在,我期待通过使用Windows Server Core映像对此进行Docker化。没有特别的原因,只是希望对旧版应用程序进行Docker化和现代化。

  • 我从这张图片开始: mcr.microsoft.com/dotnet/framework/sdk

  • 我正在使用此映像作为运行时: mcr.microsoft.com/dotnet/framework/aspnet

问题是在运行时,aspnet内的IIS无法识别aspnetmodule。在IIS中,我们通常会安装主机捆绑包,如何在docker上做到这一点?

谢谢

2 个答案:

答案 0 :(得分:0)

为了保持记录,正在分享此信息。我所做的是从Microsoft处获取映像并添加了Hosting bundle的安装。在这种情况下,我使用的是dotnet core 1.1:

# escape=`
ARG REPO=mcr.microsoft.com/dotnet/framework/runtime
FROM $REPO:4.8-windowsservercore-ltsc2019

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

ADD dotnetcore.1.0.16_1.1.13-windowshosting.exe /install/
RUN Add-WindowsFeature Web-Server; `
    Add-WindowsFeature NET-Framework-45-ASPNET; `
    Add-WindowsFeature Web-Asp-Net45; `
    Remove-Item -Recurse C:\inetpub\wwwroot\*; `
    Invoke-WebRequest -Uri https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe -OutFile C:\ServiceMonitor.exe

# Install Roslyn compilers and ngen binaries
RUN Invoke-WebRequest https://api.nuget.org/packages/microsoft.net.compilers.2.9.0.nupkg -OutFile c:\microsoft.net.compilers.2.9.0.zip; `
    Expand-Archive -Path c:\microsoft.net.compilers.2.9.0.zip -DestinationPath c:\RoslynCompilers; `
    Remove-Item c:\microsoft.net.compilers.2.9.0.zip -Force; `
    &C:\install\dotnetcore.1.0.16_1.1.13-windowshosting.exe /install /quiet | `
    &C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\csc.exe /ExeConfig:c:\RoslynCompilers\tools\csc.exe | `
    &C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\vbc.exe /ExeConfig:c:\RoslynCompilers\tools\vbc.exe | `
    &C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\VBCSCompiler.exe /ExeConfig:c:\RoslynCompilers\tools\VBCSCompiler.exe | `
    &C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\csc.exe /ExeConfig:c:\RoslynCompilers\tools\csc.exe | `
    &C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\vbc.exe /ExeConfig:c:\RoslynCompilers\tools\vbc.exe | `
    &C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install c:\RoslynCompilers\tools\VBCSCompiler.exe  /ExeConfig:c:\RoslynCompilers\tools\VBCSCompiler.exe

ENV ROSLYN_COMPILER_LOCATION c:\\RoslynCompilers\\tools

EXPOSE 80

ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]

我无法自动下载托管包。您可能需要从Microsoft网站https://dotnet.microsoft.com/download/dotnet-core/2.2下载它,选择运行时和托管捆绑包。

将其与Dockerfile一起放置,以便Docker可以将其复制到映像中。该图像可以在Windows Server 2019上运行。对于其他版本的Windows Server,您可能需要使用其他标记。

  

P / S:主机捆绑包的安装有点棘手,我以前将扩展   图像,但以某种方式使安装变得短暂而丢失。这是   为我工作,希望这会有所帮助。

答案 1 :(得分:0)

https://dotnet.microsoft.com/download/dotnet-core处找到所需的.NET Core SDK的下载链接。

以下是.NET Core 2.2的示例

FROM mcr.microsoft.com/dotnet/framework/runtime:4.7.2 AS runtime

# Replace download URL with .NET Core SDK you need.
ADD https://download.visualstudio.microsoft.com/download/pr/7ae62589-2bc1-412d-a653-5336cff54194/b573c4b135280fb369e671a8f477163a/dotnet-sdk-2.2.100-win-x64.exe c:/setup

RUN C:/setup/dotnet-sdk-2.2.100-win-x64.exe /install /quiet

ENTRYPOINT ["dotnet", "YOUR_NET_CORE_DLL_NAME.dll"]