【问题标题】:How to use dotnet core on docker dotnet framework image如何在 docker dotnet 框架镜像上使用 dotnet core
【发布时间】:2020-03-10 01:10:36
【问题描述】:
根据标题,我想在 dotnet 框架 aspnet 图像上使用 dotnet core。一点背景知识,我有带有 dotnet 核心库的 ASP.NET (4.6) 应用程序。目前它在 IIS 上运行。现在,我期待通过使用 Windows Server 核心映像将其 dockerize。没有特别的原因,只是希望对遗留应用程序进行 docker 化和现代化。
问题是在运行时,aspnet 中的 IIS 无法识别 aspnetmodule。在 IIS 中我们通常安装托管包,如何在 docker 上执行此操作?
谢谢
【问题讨论】:
标签:
asp.net
docker
asp.net-core
docker-for-windows
【解决方案1】:
只是为了记录,我分享这个。我所做的是从 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: Hosting bundle 安装有点麻烦,我以前是扩展
图像,但不知何故,安装变得短暂而丢失。这是
为我工作,希望这会有所帮助。
【解决方案2】:
在这里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"]