当前位置:网站首页 / .NET CORE / 正文

AY写给国人的ASP.NET Core2.1教程【8/30】

时间:2018年06月20日 | 作者 : aaronyang | 分类 : .NET CORE | 浏览: 1098次 | 评论 0


他Anduin的github有个项目,叫 tracer,我们download源码,下载下来

我下载后解压到 E:\shouji\Tracer-master

image.png

进入后,ls命令是列出文件目录,使员工dotnet publish发布

image.png

让项目面向容器

创建一个文件,Linux下使用touch Dockerfile,然后使用vim 编辑文件

Windows下使用New-Item Dockerfile -type file,我的是win

image.png

,由于下载下来的源码就有这个文件了,我们删掉原来的文件,或者你复制备份改个名字也行

image.png

关于PowerShell命令大全: 查看

使用notepad Dockerfile替代vim Dockerfile 我们编写脚本即可。


==============当然看了这么多,发现都是linux版本的教程============

作为新手,这个web项目也不是 0开始的项目,我们直接新建项目从来吧。


win+R 输入control打开控制面板,打开程序和功能,开启hyper-v

image.png

然后点击确定,安装完重启,如果还有不会,请参考文章

打开控制面板-管理工具-Hyper-V管理器

image.png

image.png添加到磁贴

出现启用就对了。

image.png

==================恭喜,此时,第一步你已经准备就绪===============================

我这里从docker官网,下载了个docker for windows的东东: 下载

管理员安装,下方我也没勾选,保持默认的。

image.png

image.png

安装好后,会注销下系统的。

安装成功,右下角会有个图标

image.png

右键设置,我们打开https://www.daocloud.io/mirror#accelerator-doc  自己注册账号,配置好后,docker镜像将下载很快。

image.png



===========================第二步骤完成=============================



在win上 vs2017 新建项目,  新建Core项目 ,勾选 启用Docker支持,这里我选择Windows系统。

image.png

然后点击确定,这里 提示个东西,这里我点击 是,因为我装的是windows的docker,我不想弄linux上了

image.png

然后docker又提示,容器功能没启用,想启用吗?然后会重启。

image.png


vs项目打开之前,以前要保证docker for window服务正确运行。看到这里,上面的 我们看了 anduin的项目,都是手动配置的,那些貌似 敲命令很多,

image.png

然后会自动拉取镜像,等待一段时间,我们开始写代码吧,这里貌似已经下载好了 .net core2.1的docker镜像了,我们的项目可以在docker中运行了。

image.png

此时运行docker,很奇怪的ip,感觉像是对外的一个ip,但是也能运行web,同事的电脑访问不了。因为每次运行docker时候,都是 随机一个ip

这里我也卡了很久,最后1个个尝试 发现 个规律

      这里我想对外发布的端口8888,希望别人能通过我的ip:8888 可以访问我的站点,每次开发调试 也是8888端口

打开图下文件:当然图下的 端口号是被我改过的。

image.png

我改了下第7行代码 ,端口号为888,运行docker时候,发现默认 打开浏览器是访问的 888端口,所以这里可以 判断,这里是 默认URL,上面开发模式,每次docker运行都是这个地址了,这里由于我启动了支持https,所以你这里看到了两个 url地址和端口号,理解80 为 http,443为https的。所以这里我们把888改成8888,这样开发模式下,默认url是  自动生成的ip:8888了。


第8行有个ports节点,两个ip映射, 经过我尝试   B:A     格式,A代表Docker容器中的端口号,你可以理解为 docker是一个微型操作系统的功能,B代表 我们真实机器的端口,这里我们看 8888:8888 也就是真实机器的8888端口会被转发到docker的8888端口, 那么一个docker中端口号是否可以自定义,就是前面的A在哪里定义的?

AY告诉你,是在 你web项目的 Dockerfile里面定义的,这里以前的那个端口,也被我改成8888了。这里EXPOSE就是表示  Docker中的 部署的站点,对外开放了2个端口,1个是http的10200,一个是https的8888

image.png

如果此时我们运行项目,他会给个随机的ip,这个ip你在局域网是无法访问的。你输入 http://172.17.105.14或者http://172.17.105.14:80 他也会自动跳转到https://172.17.105.14:8888/的

image.png

我们输入本机ip:8888 我的是https://192.168.1.32:8888 发现也是可以访问了。由于我启用了iis,默认80端口,所以这里没跳转,

这里我全部改成10200

image.png

同理,输入 http://192.168.1.32:10200  也会自动跳转了 https://192.168.1.32:8888

所以我们通过 启用Docker,可以很快的完成 asp.net core在docker的部署工作。


你也可以改成,34和35,是我们电脑上的ip,然后浏览器访问,会转到docker中10200和8888端口对应的资源给你。

image.png




===================当然以上都是在Windows上操作完成的,那么关于Linux上发布docker,打包 Asp.Net Core的文章是很多的。  当然我们在开发的时候,也可以把docker容器换成Linux的 =============

Win10 周年版本,是自带容器的

image.png

Docker for Windows安装后,默认在hyper-v创建了一个linux的容器

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========

image.png

然后你可以通过可以在Linux和Windows容器间切换

image.png

以上是拓展知识点。。。。。。。。。。




接下来,我们发布 站点

右键站点,点击发布

image.png

发布完,这里没有docker的支持,你可以考虑 用docker命令,把下面的东西变成 linux可以部署的。

image.png

=============================


我们可以关闭vs2017了。 

我们需要在 sln同级目录新建个Dockerfile文件,我们可以直接拷贝Ay0620/AY0620 文件夹下的那个Dockerfile拷贝一份出来

image.png

然后打开CMD  使用Docker构建项目

docker build  E:\shouji\AY0620 -t ayproj1

image.png

如果你没有镜像

docker pull microsoft/dotnet:2.1-aspnetcore-runtime

docker pull microsoft/dotnet:2.1-sdk


我们查看镜像 docker images

image.png

我想删除Hello-world镜像,我随便刚刚测试的,好大啊,我还是删掉吧

docker rmi b1bf314a296b

image.png

它提示我先停止容器  56d7f9979c24


查询容器 docker ps -a

image.png

好吧,查询到了

docker rm 56d7f9979c24

image.png

我又执行一次删除,又提示我删除

image.png

好吧

image.png

然后删除镜像 docker rmi b1bf314a296b

image.png

总结: 先删除容器  后删除镜像

镜像是 rmi   容器删除是rm


AY我中间搞了这么多小插曲:容器 = 镜像 + 读写层

我认为docker run命令类似于git pull命令。git pull命令就是git fetch 和 git merge两个命令的组合,同样的,docker run就是docker create和docker start两个命令的组合

docker stop <container-id>可以停止容器

docker kill <container-id> 杀掉进程

docker commit <container-id> 可以把容器变镜像,只读不可写了。

好了,想更好的理解一些命令,查看文章:http://dockone.io/article/783

docker logs 查看日志

docker run -d –name yourprojname -p 宿主端口:容器端口 镜像:tag

run命令讲解:https://blog.csdn.net/qq_39629343/article/details/80185435



回顾下上面构建镜像的命令docker build  E:\shouji\AY0620 -t ayproj1  这里不要继续运行了。

接下来运行镜像为容器:

docker run --name ayproj1_1  -d -p 8888:8888 -p 10200:10200   ayproj1

name是容器名字   后面的ayproj1是一开始build的镜像名字

image.png

查询

image.png

我也不知道为什么不能访问。。





====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========


抛弃上面失败的例子

这次,我们直接d盘 新建D:\aycoreroot\p1  然后拷贝那个publish后的项目,然后新建一个Dockerfile,后面我发现我暴露的5555,6666根本没用,原因还没找到

FROM microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1709 AS base
WORKDIR /app
EXPOSE 5555
EXPOSE 6666

COPY . .

ENTRYPOINT ["dotnet", "AY0620.dll"]

image.png

然后打开控制台

docker build  D:\aycoreroot\p1 -t aypub

然后运行

docker run --name aypub_1  -d -p 34:80 aypub

然后查看服务状态

image.png

然后打开浏览器 http://192.168.1.32:34/  发现34是可以访问的,但是只是一个http,而https还不可以

image.png


至于为什么,下次再看吧,至少发现 是 publish后的文件可以 直接打包docker使用。




====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========


发现个Kitematic工具,首先你得下载,然后解压。

C:\Program Files\Docker同级目录新建Kitematic目录,然后拷贝解压后的文件到这个目录

image.png

这是我刚刚的 使用的容器。


image.png


通过这个工具,可以看到很多东西。


通过这个工具,可以解决 真实端口,不需要 每次都是映射 docker的80了端口了。

image.png

image.png


https的需要指定证书,看了异常,https://+:5555;http://+:6666

====================www.ayjs.net       杨洋    wpfui.com        ayui      ay  aaronyang=======请不要转载谢谢了。=========



crit: Microsoft.AspNetCore.Server.Kestrel[0]

      Unable to start Kestrel.

System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found.

To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.

For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

   at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions, Action`1 configureOptions)

2018-06-20T09:39:54.184679400Z 

   at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions)

   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context)

   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(IServerAddressesFeature addresses, KestrelServerOptions serverOptions, ILogger logger, Func`2 createBinding)

Unhandled Exception: System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found.

To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.

For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

   at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions, Action`1 configureOptions)

   at Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps(ListenOptions listenOptions)

   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context)

   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(IServerAddressesFeature addresses, KestrelServerOptions serverOptions, ILogger logger, Func`2 createBinding)

   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)

   at Microsoft.AspNetCore.Hosting.Internal.WebHost.StartAsync(CancellationToken cancellationToken)

   at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token, String shutdownMessage)

   at Microsoft.AspNetCore.Hosting.WebHostExtensions.RunAsync(IWebHost host, CancellationToken token)

   at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)

   at AY0620.Program.Main(String[] args) in E:\shouji\AY0620\AY0620\Program.cs:line 17

   at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)



该怎么解决呢?明天看吧















推荐您阅读更多有关于“asp.net core,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

作者:杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没成立公司AY唯一QQ:875556003和AY交流

高中学历,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI个人与商用免费,源码可购买。部分DEMO不免费

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

兼容XP到win10,vs2015/2017,最新AYUI:7.6.2.8

一次购买,永久免费更新,bug反馈及时修复,普通话回答你的问题,3个月的技术支持

AYUI7.6.X 企业服务详情:680元

AYUI7.6.X 官方风格详情:4000元

AYUI7.6.X 医疗+官方风格详情5000元

本AYUI知识版权最终归杨洋(AY)所有

本AYUI最终销售权归杨洋(AY)所有

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表