基於Docker 如何部署Surging分佈式微服務引擎

1、前言

      轉眼間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

1.安裝Docker

 

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

 2.安裝rancher

下載鏡像

 

?
1
docker pull rancher/server

啓動rancher

?
1
docker run -d --restart=always -p 8080:8080 rancher/server

 安裝成功後,經過http://ip:8080訪問,以下圖所示

 3.安裝rabbitmq

 下載鏡像

?
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 的參數,而我是把參數寫到了配置文件裏。

  • datacenter:數據中心名稱(庫名)
  • data_dir:數據存儲目錄
  • server:運行在server模式
  • ui:使用UI界面
  • bind_addr:內部集羣通訊綁定的地址。默認是0.0.0.0,若是有多塊網卡,須要指定,不然啓動報錯
  • client_addr:客戶端接口綁定的地址,默認是127.0.0.1
  • retry_join:從新加入集羣
  • retry_interval:重試時間
  • rejoin_after_leave:在離開集羣以後才重試加入
  • skip_leave_on_interrupt:在啓動後,是否 Ctrl+C 優雅退出,咱們是容器模式,因此不用管,直接 true 就行了。

啓動 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訪問,以下圖所示

 

5. 安裝dotnetcore 2.1 runtime

下載鏡像

#sudo docker pull microsoft/dotnet:2.1-runtime

啓動 

 

?
1
#sudo docker run -it microsoft/dotnet:2.1-runtime

4、部署程序

1. 部署surging引擎,無需引用任何業務模塊,新建Dockerfile文件

複製代碼
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

 

 配置說明

  • Mapping_ip:映射的外部IP(環境變量)
  • Mapping_port:映射的外部端口(環境變量)
  • RootPath:業務模塊存儲的根路徑(環境變量)
  • Register_Conn:註冊中心地址(環境變量)
  • EventBusConnection:eventbus 地址(環境變量)
  • Surging_Server_IP:容器內部IP(環境變量)

啓動後在rancher以下圖所示

由於方便,把宿主機的目錄進行了掛載,microsurging 爲分佈式微服務引擎,Modules 爲業務模塊目錄,surgingapi爲網關

2. 部署surging網關,新建Dockerfile文件

 

?
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 來測試網關,以下圖

5、總結

經過1年的開發,surging 也趨於完善,性能很是不錯,平均訪問在0.12ms 左右,並且6月30日會在上海微軟研發中心和你們見面講解下surging 微服務引擎,也請你們多多關注

 

原文:http://www.javashuo.com/article/p-dirmajpq-cw.html

相關文章
相關標籤/搜索