Docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务

本文主要介绍通过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,然后点击确定即可,如图:

 640?wx_fmt=png

 2、下载并安装Docker

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

下载完成后直接安装

 通过命令查看Docker版本号:

640?wx_fmt=png

 3、修改镜像地址

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

640?wx_fmt=png

4、测试

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

640?wx_fmt=png

 640?wx_fmt=png

以上就是整个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、发布应用程序

640?wx_fmt=png

这是我的工程目录,构建镜像是通过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的编译为输出到发布目录

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

2、上传到ubuntu中

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

640?wx_fmt=png

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文件路径

640?wx_fmt=png

docker images //查看镜像

640?wx_fmt=jpeg

 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

640?wx_fmt=jpeg

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

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

640?wx_fmt=jpeg

Api网关的路由转发配置

640?wx_fmt=png

5、调用服务

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

 640?wx_fmt=png

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

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

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

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

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx

一、前言在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core Runtime、Nginx、MySQL,以及如何将我们的 ASP.NET Core MVC 程序部署到 Li…

VS2017 无法连接到Web服务器“IIS Express”终极解决方案

今天日了gou了,一大早打开VS2017的时候出现无法连接到Web服务器“IIS Express”的错误,然后必应了一下,再谷歌了一下找到的解决方法也都千篇一律,奈何都没能解决,最后通过静下心来的思考,尝试解决了问题&am…

Docker最全教程之使用.NET Core推送钉钉消息(二十)

前言上一篇我们通过实战分享了使用Go推送钉钉消息,由于技痒,笔者现在也编写了一个.NET Core的Demo,作为简单的对照和说明。最后,由于精力有限,笔者希望有兴趣的朋友可以分享下使用CoreRT将.NET Core编译成机器代码这块…

Average

Average 题意: 矩阵W的值可以通过数组a和b得到,W[i][j]a[i]b[j],现在求W的一个子矩阵,平均值最大,且子矩阵必须满足宽度至少是x,高度至少是y,计算最大平均值 题解: 那答案就变成了分别对a和b…

开箱即用Bumblebee独立部署搭建webapi网关详解

在之前的章节里都是讲述如何在程序中使用Bumblebee来构建一个Webapi网关;但这样显然有些麻烦,毕竟很多时候可能只需要一个简单负载处理,还需要写个程序针对服务进行编写代码或配置的确是比较麻烦的事情;如果有负载方面的调整还需要…

ASP.NET Core 文件系统

静态文件 目录浏览 默认页面 MIME类型配置 实战文件服务器 紧接上一讲 中间件 之后,今天来我们来讲一下关于 ASP.NET Core 中静态文件服务。什么是静态文件?先看一下下面例子(在客户端浏览器中通过 url 路径访问了网站的一张图片&#xff09…

如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...

这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程。话不多说,just do it.新建项目首先新建一个asp.net core项目,这里我新建一个WebApi默认…

[小技巧]EF Core中如何获取上下文中操作过的实体

原文地址:https://www.cnblogs.com/lwqlun/p/10576443.html作者:Lamond Lu 源代码:https://github.com/lamondlu/EFCoreFindSample背景介绍当我们在工作单元(UnitOfWork)中使用EF/EF Core的时候,为了要保持事务,一个用…

IdentityServer4-前后端分离之Vue

前言之前文章讲到如何使用Node.jsExpress构建JavaScript客户端,实现前后端分离。本节将介绍如何使用Vue实现前后端分离,文中介绍Vue的知识比较基础,适合新手学习。一、搭建Vue项目前提条件:安装nodejs、webpack和vue-cli。这个网上…

P1850 [NOIP2016 提高组] 换教室

P1850 [NOIP2016 提高组] 换教室 题意: 有2n个课安排在n个时间段上,每个时间段上都有两个一样的课同时在不同地方上,起初牛牛被所有课都被安排在Ci上课,另一节课在Di上课。牛牛现在想跟换到Di位置,它最多可以申请m节…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

在上文ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集成环境。在持续集成的过程中,Azure DevOps的Build Pipeline会下…

ASP.NET Core开源Web应用程序框架ABP

"作为面向服务架构(SOA)的一个变体,微服务是一种将应用程序分解成松散耦合服务的新型架构风格. 通过细粒度的服务和轻量级的协议,微服务提供了更多的模块化,使应用程序更容易理解,开发,测试,并且更容易抵抗架构侵蚀. 它使小型团队能够开发,部署和扩展各自的服务,实现开发的…

CodeForces 1517G Starry Night Camping(网络流最小割)

CodeForces 1517G Starry Night Camping problem 洛谷链接 solution 这个平行四边形的脑洞我™真的长见识了 本题最离谱的要求就是:平行四边形的一条边平行于 xxx 轴。 而往往这种离谱要求就是正解的途径。(((φ(◎ロ◎;)φ))) 首先不观察也能知道&#xff0c…

Acwing 307. 连通图

Acwing 307. 连通图 题意: 求 N 个节点的无向连通图有多少个,节点有标号,编号为 1∼N。 例如下列图示,三个节点的无向连通图共 4 个。 题解: 用py写 代码: def c(n, m):n int(n)m int(m)ret 1for i in range(…

Acwing 309. 装饰围栏

Acwing 309. 装饰围栏 题意: 有n个模板,长度分别是1到N,现在按照高低交错的方式排列模板,能到的很多种排列的方案。 每个方案都可以写作一个长度为N的序列,序列中的个元素是木板的长度,把这些序列按照字典…

CodeForces 901D Weighting a Tree(结论)

problem 洛谷链接 注意:保证 C[v]C[v]C[v] 的奇偶性与顶点 vvv 的度的奇偶性相同。 solution 先考虑树的情况。这是个经典问题了,从叶子往上推,对于一个点还差的边权就有这个点和其父亲的边来补足。最后判断根是否满足条件即可。 那么怎…

CF938E Max History

CF938E Max History 题意&#xff1a; 我们定义f(a)为&#xff1a; 1、开始时&#xff0c;f(a)0,M1。 2、对于每个2<i<n,如果a[M]<a[i],那么f(a)f(a)a[M],Mi。 现在对于一个给定的数组a&#xff0c;求其所有排列的f(a)之和&#xff0c;答案对1e97取模。 题解&am…

CodeForces 1491G Switch and Flip(结论)

problem 洛谷链接 solution 弱化版&#xff1a;如果不考虑翻面&#xff0c;那就是转化为若干个环的问题了。 这里我们尝试用同样的思路解决。 首先明确几个硬币一次交换后的等价情况&#xff0c;如图&#xff08;灰色表示反面&#xff09; &#xff08;u→vu\rightarrow …

ASP.NET Core 借助 K8S 玩转容器编排

Production-Grade Container Orchestration - Automated container deployment, scaling, and management. 生产级别的容器编排系统——自动化的容器部署、扩展和管理。1. 引言由于最近在学习微服务&#xff0c;所以就基于之前docker的基础上把玩一下k8s&#xff08;Kubernetes…

CF1009E Intercity Travelling

CF1009E Intercity Travelling 题意&#xff1a; 有一段路程&#xff0c;路程可以看作是从0到n的一条直线 如果从起点出发或者从休息点出发&#xff0c;连续驾驶k千米&#xff0c;则需要消耗的体能为a1…ak 每个整点都有可能拥有一个休息点&#xff0c;每个休息点存在或者不存…