阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

237次阅读
没有评论

共计 2691 个字符,预计需要花费 7 分钟才能阅读完成。

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

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

一、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,然后点击确定即可,如图:

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

2、下载并安装 Docker¶

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

下载完成后直接安装

通过命令查看 Docker 版本号:

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

3、修改镜像地址¶

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

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

4、测试¶

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

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

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

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

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

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

这是我的工程目录,构建镜像是通过 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 的编译为输出到发布目录 .NET Core 微服务架构 -Docker 部署

 

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

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

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

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

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

2、上传到 ubuntu 中¶

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

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

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

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

 

docker images // 查看镜像

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

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 .NET Core 微服务架构 -Docker 部署

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

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

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

Api 网关的路由转发配置

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

5、调用服务¶

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

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

总结¶

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

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2691字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中