本文参考自《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/了