本文參考自《Step by step: Expose ASP.NET Core over HTTPS with Docker》 自從微軟發佈.net core以來,就在許多社區掀起了討論,筆者也是在工作中開始學習.net core/asp.net core的。說實話,在學習開發asp.net cor ...
本文參考自《Step by step: Expose ASP.NET Core over HTTPS with Docker》
自從微軟發佈.net core以來,就在許多社區掀起了討論,筆者也是在工作中開始學習.net core/asp.net core的。說實話,在學習開發asp.net core中,筆者遇到了非常多的問題,踩了許多坑,比如.net core1.1版本中沒有提供system.drawing類庫,筆者只能借用mono的drawing庫來實現一些驗證碼的繪製;又比如.net core中沒有office處理類庫,又只能尋找第三方開發的EPPLUS.Core來輔助實現excel的處理。在翻過一座座大山、踩過一個個坑之後,終於到了部署階段,誰想boss說要在docker上部署https讓我徹底懵逼了,度娘上找了半天的沒一片文章有用,最後還是找了谷哥才把問題解決,所以才想寫篇文章,學習一下。
對於只想把asp.net core部署在iis或者Kestrel部署的可以參考文章
《ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)》
好,那麼進入正題~~
(1)導入Kestrel Https包
"Microsoft.AspNetCore.Server.Kestrel.Https": "1.0.1"
(2)program.cs配置https
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel(opt=> { opt.UseHttps("server.pfx", "123456"); }) .UseUrls("https://*:443") .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); }
在配置文件中,我們設置簽名文件名為server.pfx,密碼為123456,配置埠為443;由於docker是一個容器,運行環境獨立,我們需要在容器中用命令創建簽名文件。
(3)編寫Dockerfile文件
在Dockerfile文件中加入創建簽名文件命令
#定義簽名密碼 ENV certPassword 123456 RUN openssl genrsa -des3 -passout pass:${certPassword} -out server.key 2048 RUN openssl rsa -passin pass:${certPassword} -in server.key -out server.key RUN openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=localhost' RUN openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt RUN openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile server.crt -passout pass:${certPassword}
(4)創建docker image
sudo docker build -t httpssample .
(5)創建容器
//前臺運行 sudo docker run -it -p 443:443 httpssample //後臺運行 sudo docker run -t -d -p 443:443 httpssample
這樣就能訪問https://localhost/了