web-dev-qa-db-fra.com

Dockerize ASP Classic on IIS

Microsoft a investi dans l'exécution de Docker sur Windows avec Docker Desktop pour Windows . Est-il possible d'exécuter une ancienne application ASP Application classique sur IIS via Docker? Comment?

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

21
Patrick Lee Scott

J'ai finalement réussi à tout faire fonctionner. C'était beaucoup plus complexe que d'exécuter un simple Dockerfile, car c'était un site qui avait été initialement développé en 2002. Il y avait des modules qui devaient être téléchargés et installés, des sections web.config qui devaient être déverrouillées, et ODBC connexions de données qui ont dû être établies. Mon fichier docker final ressemblait à ceci - j'espère qu'il aidera la prochaine personne!

# escape=`

FROM Microsoft/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
40

Je n'ai pas essayé, mais cela ne devrait pas être un problème pour exécuter ASP classique. Le Microsoft/iis l'image est basée sur le Microsoft/windowsservercore image, qui est une installation complète de Server Core, et inclut également la prise en charge 32 bits.

La fonction ASP ne sera pas là par défaut, donc votre Dockerfile devrait commencer comme ceci:

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

(Les lignes escape et Shell facilitent simplement la création de Dockerfiles compatibles avec Windows, voir Windows, Dockerfiles et Backtick Backslash Backlash ).

Ensuite, vous devez COPY dans votre dossier d'application ASP, et exécuter le reste de votre configuration IIS avec les commandes PowerShell. Ce question a quelques bons pointeurs, et ce Dockerfile pour une application ASP.NET montre comment vous pouvez utiliser PowerShell pour configurer des sites Web.

3
Elton Stoneman

La mise à jour du serveur Windows (avec Windows Update) où le conteneur s'exécute pour correspondre à la version de l'image du conteneur est très importante. Ne pas le faire soulèverait toutes sortes de problèmes difficiles à retracer.

0
anbu