設定Docker 內IIS的Application Pool參數

通常建置Web Site後,要讓Web Site運行好一點時候,我們就不得不針對IIS Application Pool進行優化的設定。雖然,大多在Docker運行很多都會用ASP.NET Core搭配Hosting啟動。但有些情況還是會在Docker內搭配IIS使用,這時候就要來優化Application Pool
我們可以優化Docker內的Application Pool,這邊可以用兩種方式,一種是直接從Dockerfile操作,一種就是透過CD方式來操作
Dockerfile 方案
要使用Dockerfile方式,就必須採用appcmd
的命令方式去設定Application Pool,其命令方式如下:
C:\Windows\System32\inetsrv\appcmd set apppool /apppool.name:"ApplicationPool Name" /AttributeName:Value
- ApplicationPool Name:放入要設定的ApplicationPool Name,如果沒有特別另外設定ApplicationPool Name,預設就會是DefaultAppPool
- AttributeName:設定ApplicationPool參數名字,其參數名字可以參考 [ Application Pool ] ,如果遇到有階層的參數,像是下圖這樣

其AttributeName寫法就變成ProcessModel.idleTimeoutAction,就可以了
- Value: 就直接設定我們想要給的值
以這樣方式,就可以得到下面的範例,而把這些直接填寫到DockerFile就可以
RUN C:\Windows\System32\inetsrv\appcmd set apppool /apppool.name:DefaultAppPool /startMode:"AlwaysRunning"RUN C:\Windows\System32\inetsrv\appcmd set apppool /apppool.name:DefaultAppPool /processModel.idleTimeoutAction:"Suspend"RUN C:\Windows\System32\inetsrv\appcmd set apppool /apppool.name:DefaultAppPool /processModel.maxProcesses:2RUN C:\Windows\System32\inetsrv\appcmd set apppool /apppool.name:DefaultAppPool /failure.rapidFailProtection:falseRUN C:\Windows\System32\inetsrv\appcmd set apppool /apppool.name:DefaultAppPool /recycling.periodicRestart.time:"00:00:00"
上面寫法內容是設定ApplicationPool的啟動模式、閒置逾時動作、工作處理序數上限、快速失敗保護機制等參數
CD方案
如果不想要在dockerfile直接建立話,也可以透過CD佈署方式從外部方式去設定Docker內的IIS Application Pool.其語法如下
docker exec $(DockeServiceName) powershell Import-Module WebAdministration;Set-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name startMode -Value AlwaysRunning
- DockeServiceName : 要設定的Container的名稱
在使用這指令前必須確認Container內是可以使用PowerShell,而在使用Set-ItemProperty
必須先安裝WebAdministration 模組,所以,使用
Import-Module WebAdministration
如果是分段每次執行設定,類似像下面這樣設定模式,前面都必須要加入Import-Module WebAdministration,

透過這樣方式就可以在啟動container後,額外設定applicationPool了
查詢Docker內Application Pool設定
要查詢設定其語法可以這樣用,首先必須先登入Docker內,這樣會比較好操作,要在外部操作Docker也是可以,只是語法就比較長一點
1. 登入: docker exec -ti dockerName powershell
2. 匯入: Import-Module WebAdministration
3. 下面就是針對ApplicationPool查詢語法
Get-ItemProperty IIS:\appPools\DefaultAppPool | select *Get-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name processModel4. 設定語法如下:
Set-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name startMode -Value AlwaysRunningSet-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name "processModel.idleTimeoutAction" -value SuspendSet-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name "failure.rapidFailProtection" -value false
這樣就能知道目前Container IIS的設定