转眼间surging 开源已经有1年了,通过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到如今的能够在docker部署利用rancher 进行服务编排的分布式微服务引擎,再把业务进行剥离, 经过配置路径就能驱动加载业务模块,这样的细粒度设计,能更加灵活从业务中针对于对象加以细分,能更加灵活的拆分聚合服务。而这篇文章咱们来谈谈基于docker 如何部署javascript
surging源码下载html
容器,就是用来存放镜像的器皿,而镜像是构建成的一个轻量的、独立的、可执行的包,包括了执行它所须要的全部东西:代码、运行环境、系统工具、系统库、设置。java
程序被构建成镜像放到容器中,那么它所依赖的下层环境就再也不重要了。它能够在任何地方运行,甚至在混合云环境下也能够。因此为什么容器能流行起来,而容器技术兴起让Docke也渐渐的映入你们的眼帘,git
那么Docker又是什么呢?github
Docker是基于Go语言开发并开源的容器引擎sql
Docker将应用软件运行时所需的一切都打包成互相隔离的容器docker
Docker能够自动执行并配置开发/线上环境,快速构建,测试和运行复杂的多容器应用程序json
对拥有数千个节点或容器的应用程序,Docker也能快速的扩展和调配bootstrap
能够运行在主流的Linux系统,Mac以及Windows上,而且保证不管软件在哪里部署,都能正常运行并获得相同的结果vim
相关概念介绍
Image镜像和Container容器:你能够把二者理解为类和实例对象,或者是ISO系统镜像和虚拟机的关系。不一样的Image所包含的软件或者环境是不一样的,可是你可使用Dockerfile(docker特有语法规则所建立的文件)进行管理。而Container则是以Image做为模板,能够独立运行的微型系统,一个Image能够建立出来多个Container容器的实例
Registry:Docker Hub镜像仓库,为每一个人提供庞大的镜像资源进行拉取和使用
Dockerfile:是一个将镜像命令组合在一块儿的文件,用于Image的自动构建
系统环境
宿主机:Windows 10 专业版
Linux服务器: CentOS 3.10
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
经过 uname -r 命令查看你当前的内核版本
1
|
[root@runoob ~]# uname -r 3.10.0-862.E17.X86_64
|
# yum install docker-engine 安装docker包
安装成功后,使用docker version命令查看是否安装成功,安装成功后------以下图
启动 Docker
1
|
systemctl start docker
|
查看docker信息,以下图
1
|
systemctl status docker
|
测试运行 hello-world
1
|
#docker run hello-world
|
下载镜像
1
|
docker pull rancher/server
|
启动
rancher
1
|
docker run -d --restart=always -p 8080:8080 rancher/server
|
安装成功后,经过http://ip:8080访问,以下图所示
下载镜像
1
|
#docker pull rabbitmq:management
|
启动
rabbitmq
1
|
#docker run -d --name rabbitmq --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 \rabbitmq:management
|
安装成功后,经过http://ip:15672访问,以下图所示
4.安装Consul
下载镜像
1
|
#docker pull docker.io/consul:latest
|
建立 Consul 配置
1
|
#vim /opt/platform/consul/server.json
|
1
2
3
4
5
6
7
8
9
10
11
12
|
{
"datacenter"
:
"quark-consul"
,
"data_dir"
:
"/consul/data"
,
"server"
:
true
,
"ui"
:
true
,
"bind_addr"
:
"192.168.249.162"
,
"client_addr"
:
"192.168.249.162"
,
"bootstrap_expect"
: 1,
"retry_interval"
:
"10s"
,
"rejoin_after_leave"
:
false
,
"skip_leave_on_interrupt"
:
true
}
|
配置说明
官方在启动容器的时候是将一部分配置做为 docker run
的参数,而我是把参数写到了配置文件里。
0.0.0.0
,若是有多块网卡,须要指定,不然启动报错127.0.0.1
;启动 consul-server
1
|
docker run -d --net=host --name consul -v /opt/platform/consul/config:/consul/config -v /opt/platform/consul/data:/consul/data consul agent
|
安装成功后,经过http://ip:8500访问,以下图所示
下载镜像
#sudo docker pull microsoft/dotnet:2.1-runtime
启动
1
|
#sudo docker run -it microsoft/dotnet:2.1-runtime
|
FROM microsoft/dotnet:2.1-runtime WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "Surging.Services.Server.dll"]
发布程序
1
|
dotnet publish -r centos.7-x64 -c release
|
使用Dockerfile建立镜像
1
|
#docker build -t surgingserver .
|
启动
1
2
|
#docker run --name surgingserver --env Mapping_ip=192.168.249.162 --env Mapping_Port=198 --env RootPath=/home/fanly --env
Register_Conn=192.168.249.162:8500 --env EventBusConnection=172.17.0.4 --env Surging_Server_IP=0.0.0.0 -v /home/fanly:/home/fanly -it -p 198:198 surgingserver
|
配置说明
启动后在rancher以下图所示
由于方便,把宿主机的目录进行了挂载,microsurging 为分布式微服务引擎,Modules 为业务模块目录,surgingapi为网关
1
2
3
4
|
FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY . .
ENTRYPOINT [
"dotnet"
,
"Surging.ApiGateway.dll"
]
|
发布程序
1
|
dotnet publish -r centos.7-x64 -c release
|
使用Dockerfile建立镜像
1
|
docker build -t surgingapi .
|
启动
1
|
#docker run --name surgingapi -it -p 729:729 --env Register_Conn=192.168.249.162:8500 surgingapi
|
启动后在rancher以下图所示
能够经过http://ip:729进行访问
而后能够经过postman 来测试网关,以下图
经过1年的开发,surging 也趋于完善,性能很是不错,平均访问在0.12ms 左右,并且6月30日会在上海微软研发中心和你们见面讲解下surging 微服务引擎,也请你们多多关注