IIS 上的 Dockerize ASP 经典

Dockerize ASP Classic on IIS

Microsoft 一直在 windows 上投资 运行ning docker,Docker 桌面 Windows .是否可以通过 Docker 在 IIS 上 运行 遗留 ASP 经典应用程序?怎么样?

https://hub.docker.com/r/microsoft/iis/

我没试过,但 运行 经典 ASP 应该不是问题。 microsoft/iis 映像基于 microsoft/windowsservercore 映像,它是完整的服务器核心安装,还包括 32 位支持。

默认情况下 ASP 功能不存在,因此您的 Dockerfile 必须这样开始:

# escape=`
FROM microsoft/iis
SHELL ["powershell", "-command"]
RUN Install-WindowsFeature Web-ASP

escapeSHELL 行只是让构建 Windows 友好的 Dockerfile 变得更容易,请参阅 Windows, Dockerfiles and the Backtick Backslash Backlash)。

然后您将 COPY 在您的 ASP 应用程序文件夹中,并且 运行 您的 IIS 设置的其余部分使用 PowerShell 命令。 This question has some good pointers, and this Dockerfile for an ASP.NET app 展示了如何使用 PowerShell 配置网站。

我终于搞定了这一切。它比 运行 一个简单的 Dockerfile 复杂得多,因为它是一个最初于 2002 年开发的站点。必须下载和安装模块,需要解锁 web.config 部分, 以及必须建立的 ODBC 数据连接。我的最终 docker 文件如下所示 - 希望对下一个人有帮助!

# escape=`

FROM mcr.microsoft.com/windows/servercore/iis
SHELL ["powershell", "-command"]

RUN Install-WindowsFeature Web-ASP; `
    Install-WindowsFeature Web-CGI; `
    Install-WindowsFeature Web-ISAPI-Ext; `
    Install-WindowsFeature Web-ISAPI-Filter; `
    Install-WindowsFeature Web-Includes; `
    Install-WindowsFeature Web-HTTP-Errors; `
    Install-WindowsFeature Web-Common-HTTP; `
    Install-WindowsFeature Web-Performance; `
    Install-WindowsFeature WAS; `
    Import-module IISAdministration;

RUN md c:/msi;

RUN Invoke-WebRequest 'http://download.microsoft.com/download/C/9/E/C9E8180D-4E51-40A6-A9BF-776990D8BCA9/rewrite_amd64.msi' -OutFile c:/msi/urlrewrite2.msi; `
    Start-Process 'c:/msi/urlrewrite2.msi' '/qn' -PassThru | Wait-Process;

RUN Invoke-WebRequest 'https://download.microsoft.com/download/1/E/7/1E7B1181-3974-4B29-9A47-CC857B271AA2/English/X64/msodbcsql.msi' -OutFile c:/msi/msodbcsql.msi; 
RUN ["cmd", "/S", "/C", "c:\windows\syswow64\msiexec", "/i", "c:\msi\msodbcsql.msi", "IACCEPTMSODBCSQLLICENSETERMS=YES", "ADDLOCAL=ALL", "/qn"];

EXPOSE 8000
RUN Remove-Website -Name 'Default Web Site'; `
    md c:\mywebsite; `
    New-IISSite -Name "mywebsite" `
                -PhysicalPath 'c:\mywebsite' `
                -BindingInformation "*:8000:";

RUN & c:\windows\system32\inetsrv\appcmd.exe `
    unlock config `
    /section:system.webServer/asp

RUN & c:\windows\system32\inetsrv\appcmd.exe `
      unlock config `
      /section:system.webServer/handlers

RUN & c:\windows\system32\inetsrv\appcmd.exe `
      unlock config `
      /section:system.webServer/modules

RUN Add-OdbcDsn -Name "mywebsite" `
                -DriverName "\"ODBC Driver 13 For SQL Server\"" `
                -DsnType "System" ` 
                -SetPropertyValue @("\"Server=XXXX.us-east-2.rds.amazonaws.com\"", "\"Trusted_Connection=No\"");

ADD . c:\mywebsite

更新容器运行所在的 Windows 服务器(使用 Windows 更新)以匹配容器映像版本非常重要。不这样做会引发各种难以追踪的问题。