基于netcore 3.1的aspnet core发布到Docker

参考:
https://www.cnblogs.com/lonelyxmas/p/10748667.html

https://hub.docker.com/_/microsoft-dotnet-core

https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/Dockerfile

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-3.1

1.Docker服务端环境准备

a)docker安装:略
b)拉取aspnet依赖镜像,建议先把镜像仓库改成国内服务商,比较快,这里是使用阿里。

   docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1 
   //(指定tag为3.1版本,可以用其他版本)也可以使用runtime镜像,或者sdk镜像,这里建议使用专用的。https://hub.docker.com/_/microsoft-dotnet-core-aspnet/

微信截图_20200303173726

2.源码准备(手动发布)

a)编写Dockerfile文件:
通过vs项目右键添加Docker支持,会自动创建一个Dockerfile文件及内容,修改文件属性为始终复制并修改里面的内容为以下内容(因为是自己手动发布,而原文件内容是要做持续集成需要编译)

#使用专有镜像及指定netcore版本作为原始依赖镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

#在容器中的当前操作目录
WORKDIR /web 

#把服务器中的当目录 复制到 容器中的当前操作目录WORKDIR
COPY . ./ 

#暴露容器的端口
EXPOSE 80  

#使用ENTRYPOINT启动容器中的应用(也可以使用CMD,两者有区别)
ENTRYPOINT ["dotnet", "MVCProject3_1.dll"]

b)发布
点击发布到目录中,并上传到linux服务上

3.docker操作

a)创建镜像

cd publish  //进入linux中的源码目录中
docker build -t web1 .  //不要忘记最后一个点号,使用build命令创建镜像,名字为web1,点号表示在当前目录寻找Dockerfile文件。

b)生成容器,并后台运行式启动

docker run -i -t -d -p 5000:80 --name=my-web1 web1 /bin/bash   //使用服务器端口5000映射容器的端口80

c)查看容器运行状态

  docker ps //查看容器是否启动
  docker logs $container_id //查看容器的日志 
  docker exec -it my-web1 /bin/bash  //进入容器查看发布源码

d)访问部署好的容器应用

   curl 192.168.31.51:5000  //5000为docker run指定的服务器端口,映射对应容器的中EXPOSE端口

4.使用nginx作为netcore应用程序的反向代理:80端口

生成容器时注意选项:–link参数

dotnet常用命令

1.dotnet –help 帮助 (–help可以在每个命令上使用,可显示详细信息)
2.dotnet new 创建项目和文件
3.dotnet build 只生成
5.dotnet run 生成并运行(会出现dos环境)
6.dotnet watch run 监控文件改动模式下的生成和运行(只要改支项目文件,保存后,自动停止生成运行)
7.dotnet publish 发布项目
8.dotnet restore 还原项目依赖项(常用于项目迁移,dll包文件未打包,配置文件中只存储了包名)

老张的哲学–jwt

1.JWT,JSON Web Token(JWT),作用:保护API
IdentityServer4 默认支持两种类型的 Token,一种是 Reference Token,一种是 JWT Toke
2.有哪些保护方式:
a)非登录状态:自己约定加密,比如支付中常用的md5加密
b)登录状态:session+cookie:常用的方式
c)登录状态:JWT,一切源于HttpContext,重点在于Claim,移动端和SPA(单页面应用)更好。
3.核心知识点:
a)Claim:声明,就是令牌携带的数据,比如:身份证上的姓名,地址,身份证号
b)Bearer:持票人,比如:
c)组成:一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。工
c1)头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等
c2)载荷就是存放有效信息的地方
c3)一个签证信息,这个签证信息由三部分组成

老张的哲学-netcore基础

https://www.bilibili.com/video/av58096866?from=search&seid=6281771915682149506
https://www.cnblogs.com/laozhang-is-phi/p/9495620.html
https://github.com/anjoy8/Blog.Core
1.netcore:
a)跨平台,开源
b)高性能
c)基于kestrel的控制台程序
2.执行流程
微信截图_20200218204833
a)iis/apache/nginx只是一个反向代理工具,程序的解释放到netcore里(进程外启动)
b)中间件与程序处理模块的区别
c)HttpContext:客户端跟 Web应用程序交互 是通过 HttpContext 传导的。
微信截图_20200221201203

asp.netcore基础–目录及文件说明

1.常规目录入文件:截图
2.startup.cs:两个核心方法,ConfigureService和Configure,这两个方法中其实都使用依赖注入,所以方法参数能直接使用(看netcore源码就知,在hostbuild内)!!!
a)ConfigureService:配置服务
b)Configure:配置中间件管道,http按顺序执行,按倒序返回
c)常用中间件:
3.program.cs:
a)查看netcore源码方法vs2019已经替代了很多resharper功能:github官网,vs2019工具中开启,
微信截图_20200218213535
b)始于WebHost
“`
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();//启动,查看源码里面cmd启动时看到info
}

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)//dotnet创建默认builder
            .UseStartup<Startup>();  //让可自定义的配置

“`
c)托管方式有两种,一种是inprocess和outofprocess,进程内托管是依赖与iis集成,进程外就是kestrel托管后,外面再可以使用反向代理
4.appsettings.json:项目的配置文件代替以前的app.config,使用json编写,修改后需要重新启动项目。
5.Controller:暴露api的controller目录
6.nuget:第三方包/dll管理工具
7.properties/launchSettings.json:项目启动参数,使用json编写,可配置启动域名和端口
8.bin:调用或者发布生成目录,可以进入子目录直接命令行启动:dotnet 项目名.dll
9.wwwroot:静态资源,可以在程序中修改这个默认目录