[微服務系列][02]以SSL的方式在local端Docker運作ASP.NET WebAPI Core

[微服務系列][02]以SSL的方式在local端Docker運作ASP.NET WebAPI Core

以SSL的方式在local端Docker運作ASP.NET WebAPI Core的方法,這邊分成兩種
1. 如果你是在Windows執行Linux container的話:
正式環境的SSL憑證是需要花錢去申請的,請自己去找中華電信申請吧!不過我們LOCAL端測試的話,直接用self-signed development certificates產生就可以了,白話的說就是在command line打一些指令就可以生出來了!如下:

dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p yourPassword 
dotnet dev-certs https --trust

ps. 稍微補充一下上面,  %USERPROFILE%路徑就是你打開檔案總管的(快速存取)



執行成功的話,你應該就會看到下面的文字,會顯示successfully,而有時候他會跳出視窗要你點yes,沒有跳出視窗讓你確認的話,就把憑證刪除之後重新把上面加入憑證的動作再做一次

ps.補充,想要刪除憑證的話,可以按下Windows key + R,然後執行inetcpl.cpl,就可以看到剛才自己產出的憑證,可自行刪除。



憑證加入之後,在Docker Desktop for Windows把我們上一篇文章[微服務系列][01]ASP.NET WebAPI Core發行到local端Docker產生的container先刪除了



然後重新docker build、重新docker run
docker build -t webapidatacentercore .
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_Kestrel__Certificates__Default__Password="myPassword" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v %USERPROFILE%\.aspnet\https:/https/ --name myapp webapidatacentercore
ps. 第二行的docker run的參數順便補充一下,建議瞭解一下參數比較好,因為各個客戶的production環境的需求不同,你應該要能夠下不同的參數來因應不同的情況喔:
--rm 一旦停掉這個微服務之後,docker就會順便刪除他,通常在production不會這樣搞,debug階段也不會,一般都是測試上線階段才會用這個參數。
-it表示這個docker開始run之後,你仍可以使用terminal來下指令控制這個docker微服務
-p表示由本機的port界接到docker的port,例如:-p 8000:80,本機的8000 port會自動轉到docker的80port
-e就是設定docker的環境變數,這邊大多是用來設定https的相關環境設定,
-v大致上來說就是配置一塊磁碟空間給container,官方說有很多很好的好處,不過要解釋完他大概就天黑了,這邊就先不深究,直接使用他吧 -name就是幫這個container取一個名稱                            
  

然後再打開網址:
你就可以看到順利的用https、也就是SSL取得WebAPI的資料囉
https://localhost:8001/WeatherForecast


這篇大概先這樣……

 
參考資料:
Hosting ASP.NET Core Images with Docker over HTTPS | Microsoft Docs
Docker run reference | Docker Documentation
Use volumes | Docker Documentation
Dockerize an ASP.NET Core application | Docker Documentation