本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发)、统一认证(IdentityServer4)、应用服务(asp.net core web api);

本文不针对微服务进行说明,后续会针对我对微服务的理解在做记录。

一、Docker原理

对 Docker 最简单并且带有一定错误的认知就是 “Docker 是一种性能非常好的虚拟机”。

但是这是有一定错误的说法。Docker 相比于传统虚拟机的技术来说先进了不少,具体表现在 Docker 不是在宿主机上虚拟出一套硬件后再虚拟出一个操作系统,而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。

Docker 中有三个核心概念:Image、Container、Repository。

  • Image: 大家对 镜像 的概念不会陌生。但和 windows 的那种 iso 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 git 仓库的区别)。

  • Container: 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。

  • Repository: Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。常用的 Docker hub 有 https://hub.docker.com/(docker官方) 、 https://cr.console.aliyun.com/(阿里云)等。

二、Windows系统中Docker的安装

1、启用Hyper-V

打开控制面板 - 程序和功能 - 启用或关闭Windows功能,勾选Hyper-V,然后点击确定即可,如图:

 2、下载并安装Docker

下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows,需要注册一个Docker账号才能下载

下载完成后直接安装

通过命令查看Docker版本号:

 3、修改镜像地址

由于Docker官方镜像会非常慢,我是修改的阿里云的镜像

4、测试

万能的HelloWorld,通过PowerShell运行 Docker run hello-world

docker ps -a //查看运行的容器

以上就是整个Windows中安装Docker环境的过程

三、ubuntu中安装Docker环境

我是在AWS申请了一台免费的服务器,是用的ubuntu系统。如果需要申请AWS的服务器,可以通过AWS官网注册账号进行申请,需要填写信用卡账号,https://portal.aws.amazon.com/billing/signup#/start

本文ubuntu中安装Docker是直接参考官方教程:https://docs.docker.com/install/linux/docker-ce/ubuntu/

安装的时候最好切换到root账号进行安装

ubuntu的远程是通过putty,具体怎么用可以百度

四、发布并部署服务

1、创建Dockerfile、发布应用程序

这是我的工程目录,构建镜像是通过Dockerfile来构建的。

VS2017 是支持自动构建Dockerfile文件,工程右键-添加-Docker支持

下面是我的Dockerfile的内容

FROM microsoft/aspnetcore:2.1 //基础镜像,这里是.net core的基础运行环境
WORKDIR /publish //创建工程目录
COPY . /publish //将当前目录拷贝到镜像中,注意 COPY . 后面又空格
EXPOSE 80 //容器对外暴露80端口
ENTRYPOINT ["dotnet", "ZY.Gateway.dll"] //启动容器内的服务
//这里相当于构建镜像的命令,是逐行执行

需要设置Dockerfile的编译为输出到发布目录

以上都设置好以后,通过VS发布程序

发布成功后,在工程目录的bin/release目录下找到我们的发布后的文件

其他服务的发布跟以上发布类似

2、上传到ubuntu中

通过WinScp工具进行上传,将三个服务都上传到服务器,WinScp怎么用,可以百度一下

3、构建镜像

docker build -t apigateway .   //构建网关镜像 

docker build -t identityserver -f /home/ubuntu/dockerapp/identityserver/publish/Dockerfile . //构建认证服务镜像

docker build -t testserver -f /home/ubuntu/dockerapp/testserver/publish/Dockerfile . //构建测试服务镜像

-t //镜像名称

-f //dockerfile文件路径

docker images //查看镜像


 4、运行容器

镜像已经在前面构建完成,这一步会根据构建的镜像来运行容器,将我们的服务跑起来

docker run -d -p 5000:80 --name apigateway_container apigateway
docker run -d -p 6000:80 --name identityserver_container identityserver
docker run -d -p 7000:80 --name testserver_container testserver
//分别将网关服务,认证服务,测试服务容器跑起来
//-d 保持后台进程运行 -p 端口映射,{主机端口}:{容器端口}

通过命令查看容器运行情况

docker ps -a


在配置网关服务的时候会涉及到容器与容器之间的网络访问,Docker在安装的时候会创建一个172.17.0.1的IP网关,可以通过172.17.0.1来做端口的转发。

通过命令可以查看docker0的网关

Api网关的路由转发配置

5、调用服务

通过Postman来调用通过Docker运行的服务,通过API网关访问认证服务获取Token

整个Docker的安装,服务的发布,镜像的打包,容器的运行就全部完成。

整个过程不是一气呵成的,踩了不少坑,在踩坑的过程中也学到和理解了很多东西。

下一篇会介绍通过docker-compose进行发布,通过docker-compose可以实现一行命令将完成所有服务的构建镜像和运行镜像过程。

https://www.cnblogs.com/zyrmb/p/10509524.html  //这是我记录的关于Docker相关的命令,可以参考

https://yeasy.gitbooks.io/docker_practice/content/  //这是针对Docker的整体介绍

.net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)的更多相关文章

  1. [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序

    本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...

  2. 大话IdentityServer4之使用 IdentityServer4 保护 ASP.NET Core 应用

    这几天一直在研究IdentityServer4在asp.net core3.0中的应用,下面说说我的理解: 我们每一个.net core 项目大家可以理解为我新建了一个动物园或者植物园等,注册用户想要 ...

  3. .NET Core 微服务架构-Docker部署

    本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...

  4. 字节跳动内部微服务架构-Docker实战学习笔记分享 真香

    前言 基于 Spring Cloud 的微服务设计和开发,已经越来越多地得到了更多企业的推广和应用,而 Spring Cloud 社区也在不断的迅速发展壮大之中,近几年时间,Spring Cloud ...

  5. 【微服务架构】SpringCloud之Eureka(服务注册和服务发现基础篇)(二)

    上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix ...

  6. 微服务架构 | 5.2 基于 Sentinel 的服务限流及熔断

    目录 前言 1. Sentinel 基础知识 1.1 Sentinel 的特性 1.2 Sentinel 的组成 1.3 Sentinel 控制台上的 9 个功能 1.4 Sentinel 工作原理 ...

  7. 用docker弹性部署自己的服务

    很久不看docker的东西了,之前了解的一些基本命令都忘得差不多了,适逢工作需要,再来复习巩固下.今天想完成的是:借助docker不部署下自己的服务. 环境准备 都说“巧妇难为无米之炊”,所以还是需要 ...

  8. .NET Core Generic Host项目使用Topshelf部署为Windows服务

    1..NET Core Generic Host是什么? 在.NET Core 2.1版本加入了一种新的Host,即Generic Host(通用主机). 现在在2.1版本的Asp.Net Core中 ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_6-02 springcloud网关组件zuul

    笔记 2.SpringCloud的网关组件zuul基本使用     简介:讲解zuul网关基本使用 1.加入依赖 2.启动类加入注解 @EnableZuulProxy         默认集成断路器 ...

随机推荐

  1. Ubuntu 12.04 Desktop下vncserver配置:Unity以及Xfce4桌面环境

    将gnome改成xfce xfce-session 即可 2013-01-30 14:45:34|  分类: Ubuntu |  标签:ubuntu12.04  unity  vncserver  s ...

  2. DAY27.XIA.面向對象

    2018-07-23  08:43:17

  3. ASP.Net MVC(3) 之Razor视图引擎的基础语法

    Razor视图引擎的基础语法: 1.“_”开头的cshtml文档将不能在服务器上访问,和asp.net中的config文档差不多. 2.Razor语法以@开头,以@{}进行包裹. 3.语法使用: 注释 ...

  4. java中JDBC连接数据库操作的基本步骤

    JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...

  5. java⑾

    1.数组: 01.一组 相同数据类型的集合! 02.数组在内存中会 开辟一串连续的空间来保存数据! ***存储30名学生的姓名! 01.姓名 应该用什么数据类型保存??? String02.难道需要创 ...

  6. DevExpress WinForms v18.2新版亮点(五)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v1 ...

  7. 使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)

    参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461 ...

  8. Activity中通过标签获取当前Fragment

    初始化完成之后才有数据,否则获取不到 String tag = "android:switcher:"+viewPager.getId()+":"+viewPa ...

  9. Install SharePoint 2013 with SP1 on Windows Server 2012 R2 error - This Product requires .NF 4.5

    博客地址:http://blog.csdn.net/FoxDave 最近因为项目需要要搭建SharePoint 2013的开发环境. 准备了Windows Server 2012 R2系统和Sha ...

  10. VS2017企业版的密钥

    Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QFVisual Studio 2017(VS2017 ...