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?
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
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.
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.