1、前言
轉(zhuǎn)眼間surging 開源已經(jīng)有1年了,經(jīng)過1年的打磨,surging已從最初在window 部署的分布式微服務(wù)框架,到現(xiàn)在的可以在docker部署利用rancher 進(jìn)行服務(wù)編排的分布式微服務(wù)引擎,再把業(yè)務(wù)進(jìn)行剝離, 通過配置路徑就能驅(qū)動加載業(yè)務(wù)模塊,這樣的細(xì)粒度設(shè)計(jì),能更加靈活從業(yè)務(wù)中針對于對象加以細(xì)分,能更加靈活的拆分聚合服務(wù)。而這篇文章我們來談?wù)劵赿ocker 如何部署
2、概述
容器,就是用來存放鏡像的器皿,而鏡像是構(gòu)建成的一個輕量的、獨(dú)立的、可執(zhí)行的包,包括了執(zhí)行它所需要的所有東西:代碼、運(yùn)行環(huán)境、系統(tǒng)工具、系統(tǒng)庫、設(shè)置。
程序被構(gòu)建成鏡像放到容器中,那么它所依賴的下層環(huán)境就不再重要了。它可以在任何地方運(yùn)行,甚至在混合云環(huán)境下也可以。所以為何容器能流行起來, 而容器技術(shù)興起讓docke也漸漸的映入大家的眼簾,
那么docker又是什么呢?
- docker是基于go語言開發(fā)并開源的容器引擎
- docker將應(yīng)用軟件運(yùn)行時所需的一切都打包成互相隔離的容器
- docker可以自動執(zhí)行并配置開發(fā)/線上環(huán)境,快速構(gòu)建,測試和運(yùn)行復(fù)雜的多容器應(yīng)用程序
- 對擁有數(shù)千個節(jié)點(diǎn)或容器的應(yīng)用程序,docker也能快速的擴(kuò)展和調(diào)配
- 可以運(yùn)行在主流的linux系統(tǒng),mac以及windows上,并且保證無論軟件在哪里部署,都能正常運(yùn)行并得到相同的結(jié)果
相關(guān)概念介紹
image鏡像和container容器:你可以把兩者理解為類和實(shí)例對象,或者是iso系統(tǒng)鏡像和虛擬機(jī)的關(guān)系。不同的image所包含的軟件或者環(huán)境是不同的,但是你可以使用dockerfile(docker特有語法規(guī)則所創(chuàng)建的文件)進(jìn)行管理。而container則是以image作為模板,可以獨(dú)立運(yùn)行的微型系統(tǒng),一個image可以創(chuàng)建出來多個container容器的實(shí)例
registry:docker hub鏡像倉庫,為每個人提供龐大的鏡像資源進(jìn)行拉取和使用
dockerfile:是一個將鏡像命令組合在一起的文件,用于image的自動構(gòu)建
3、環(huán)境搭建
系統(tǒng)環(huán)境
宿主機(jī):windows 10 專業(yè)版
linux服務(wù)器: centos 3.10
1.安裝docker
docker 要求 centos 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看本頁面的前提條件來驗(yàn)證你的centos 版本是否支持 docker 。
通過 uname -r 命令查看你當(dāng)前的內(nèi)核版本
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 |
測試運(yùn)行 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 run -d --restart=always -p 8080:8080 rancher /server |
#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 |
創(chuàng)建 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
的參數(shù),而我是把參數(shù)寫到了配置文件里。
- datacenter:數(shù)據(jù)中心名稱(庫名)
- data_dir:數(shù)據(jù)存儲目錄
- server:運(yùn)行在server模式
- ui:使用ui界面
- bind_addr:內(nèi)部集群通信綁定的地址。默認(rèn)是 0.0.0.0 ,如果有多塊網(wǎng)卡,需要指定,否則啟動報(bào)錯
- client_addr:客戶端接口綁定的地址,默認(rèn)是 127.0.0.1 ;
- retry_join:重新加入集群
- retry_interval:重試時間
- rejoin_after_leave:在離開集群之后才重試加入
- skip_leave_on_interrupt:在啟動后,是否 ctrl+c 優(yōu)雅退出,我們是容器模式,所以不用管,直接 true 就好了。
啟動 consul-server
安裝成功后,通過http://ip:8500訪問,如下圖所示
5. 安裝dotnetcore 2.1 runtime
下載鏡像
1
|
#sudo docker pull microsoft/dotnet:2.1-runtime |
啟動
1
|
#sudo docker run -it microsoft/dotnet:2.1-runtime |
三、部署程序
1. 部署surging引擎,無需引用任何業(yè)務(wù)模塊,新建dockerfile文件
1
2
3
4
|
from microsoft /dotnet :2.1-runtime workdir /app copy . . entrypoint [ "dotnet" , "surging.services.server.dll" ] |
發(fā)布程序
1
|
dotnet publish -r centos.7-x64 -c release |
使用dockerfile創(chuàng)建鏡像
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(環(huán)境變量)
- mapping_port :映射的外部端口 (環(huán)境變量)
- rootpath:業(yè)務(wù)模塊存儲的根路徑 (環(huán)境變量)
- register_conn:注冊中心地址 (環(huán)境變量)
- eventbusconnection:eventbus 地址 (環(huán)境變量)
- surging_server_ip:容器內(nèi)部ip (環(huán)境變量)
啟動后在rancher如下圖所示
因?yàn)榉奖悖阉拗鳈C(jī)的目錄進(jìn)行了掛載,microsurging 為分布式微服務(wù)引擎,modules 為業(yè)務(wù)模塊目錄,surgingapi為網(wǎng)關(guān)
2. 部署surging網(wǎng)關(guān), 新建dockerfile文件
1
2
3
4
|
from microsoft/dotnet:2.1-runtime workdir /app copy . . entrypoint ["dotnet", "surging.apigateway.dll"] |
發(fā)布程序
1
|
dotnet publish -r centos.7-x64 -c release |
使用dockerfile創(chuàng)建鏡像
1
|
docker build -t surgingapi . |
啟動
啟動后在rancher如下圖所示
可以通過http://ip:729進(jìn)行訪問
然后可以通過postman 來測試網(wǎng)關(guān),如下圖
四、總結(jié)
通過1年的開發(fā),surging 也趨于完善,性能非常不錯,平均訪問在0.12ms 左右
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/fanliang11/p/9191793.html