docker微服務部署之:六、Rancher管理部署微服務
docker微服務部署之:五、利用DockerMaven插件自動構建鏡像
一、 什麽是Rancher
Rancher是一個開源的企業級容器管理平臺。通過Rancher,企業再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。
Rancher官網:https://rancher.com
二、Docker中下載Rancher鏡像並運行
#Rancher鏡像下載 $ sudo docker pull rancher/server $ sudo docker images | greprancher/server rancher/server latest aff17b0067db 1 second ago 1.09GB #Rancher安裝 docker run -d --name=rancher -p 8080:8080 rancher/server
在瀏覽器中輸入:http://192.168.31.181:8080,如果能打開歡迎頁,表示安裝成功。(提示:rancher的啟動會有點慢,可能需要等一會兒)
全是英文,看不懂?沒關系,可以點擊右下鍵的English,選擇語言為簡體中文。
三、Rancher環境管理
Rancher的作用就是用來管理Docker容器的環境。可以通過Rancher的環境管理,來管理不同團隊的Docker環境。每套Ranhcer環境之間,都是隔離的,相互之間沒有影響。
3.1. 添加環境
點擊頂部導航欄的Default,點擊環境管理
進入了環境管理界面,點擊添加環境
打開了添加環境界面,輸入相應名稱和描述,並選擇環境模板,最後點擊創建,完成環境的添加。
在環境列表界面,可以看到已經創建好了一個名為test的環境,並且該環境已經完成了啟動。
3.2.在環境中,管理docker中的微服務
首先切換到剛創建的test環境。點擊頂部導航欄的Default,點擊test
打開了test中的用戶應用管理界面
四、配置主機
切換到了test環境,那個該環境,rancher需要管理哪臺主機docker中的微服務呢?這就是這一步需要做的事情。
點擊頂部導航欄中的基礎架構,點擊主機
進入了主機列表界面,點擊添加主機
進入添加主機界面,(如果是新安裝的rancher,沒有進行過配置,可能會出現類似如下界面,看看當前站點地址是否為需要被管理的docker的主機的ip地址,如果是,直接點擊下面的保存即可。)
進入了添加主機界面,在4處輸入需要管理的docker的主機IP地址,然後點擊5處的復制按鈕,把復制之後的代碼腳本,在填入的主機中執行,執行完成之後,點擊關閉按鈕,完成主機的添加操作。
復制的代碼腳本是幹嘛的呢?其實就是在docker主機中,安裝rancher的代理,以便讓rancher可以管理docker。
附上執行上面復制的代碼腳本過程
$ sudo docker run -e CATTLE_AGENT_IP="192.168.31.181" --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://192.168.31.181:8080/v1/scripts/41FD60E2D772FF772A69:1546214400000:Z2mxv2DC4Id5S34xJIgZaokUpoY INFO: Running Agent Registration Process, CATTLE_URL=http://192.168.31.181:8080/v1 INFO: Attempting to connect to: http://192.168.31.181:8080/v1 INFO: http://192.168.31.181:8080/v1 is accessible INFO: Configured Host Registration URL info: CATTLE_URL=http://192.168.31.181:8080/v1 ENV_URL=http://192.168.31.181:8080/v1 INFO: Inspecting host capabilities INFO: Boot2Docker: false INFO: Host writable: true INFO: Token: xxxxxxxx INFO: Running registration INFO: Printing Environment INFO: ENV: CATTLE_ACCESS_KEY=A2ED98628633A662C191 INFO: ENV: CATTLE_AGENT_IP=192.168.31.181 INFO: ENV: CATTLE_HOME=/var/lib/cattle INFO: ENV: CATTLE_REGISTRATION_ACCESS_KEY=registrationToken INFO: ENV: CATTLE_REGISTRATION_SECRET_KEY=xxxxxxx INFO: ENV: CATTLE_SECRET_KEY=xxxxxxx INFO: ENV: CATTLE_URL=http://192.168.31.181:8080/v1 INFO: ENV: DETECTED_CATTLE_AGENT_IP=172.17.0.1 INFO: ENV: RANCHER_AGENT_IMAGE=rancher/agent:v1.2.11 INFO: Launched Rancher Agent: fea792c5f8413fece7c635f4feaf7127f62911cfb1ef44b38fe0aa5323aba473 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zuul latest ffed513f7188 32 hours ago 642MB article latest b80e1550a5ce 32 hours ago 651MB eureka latest 9b410097b49e 34 hours ago 645MB jdk1.8 latest 1f2578d93bd0 2 days ago 598MB centos centos7 9f38484d220f 7 days ago 202MB centos/mysql-57-centos7 latest ee80146ff512 5 weeks ago 453MB rancher/server latest aff17b0067db 7 weeks ago 1.09GB rancher/scheduler v0.8.6 fbedeaddc3e9 8 weeks ago 248MB rancher/agent v1.2.11 1cc7591af4f5 7 months ago 243MB rancher/net v0.13.17 f170c38e3763 8 months ago 311MB rancher/dns v0.17.4 678bde0de4d2 8 months ago 249MB rancher/healthcheck v0.3.8 ce78cf69cc0b 8 months ago 391MB rancher/metadata v0.10.4 02104eb6e270 8 months ago 251MB rancher/network-manager v0.7.22 13381626c510 8 months ago 256MB rancher/net holder 665d9f6e8cc1 23 months ago 267MB
點擊關閉之後,可能需要等待一點點時間,就可以看到在主機列表界面,看到連上了我們剛添加的192.168.31.181主機。
可以看到主機已經出去可用狀態(ACTIVE),並且可以看到主機的一些信息,如操作系統,ip地址,內存一級硬盤等等,還有容器中的服務,以及這些服務的狀態。
五、往Docker主機中添加應用
上面已經做了這麽多,那麽如何把自己的服務部署到docker中。
服務都是放在應用中,所以需要先創建一個應用。
創建應用的步驟如下:
首先,點擊頂部導航欄中的應用,點擊全部
打開應用列表管理界面,可以看到有4個應用,就是剛剛執行復制的代碼腳本,在docker中運行了這4個應用。並且該4個應用最前面的圖標都是綠色的,表示處於運行狀態。
點擊添加應用,給應用取個名字,並添加描述,然後點擊創建,完成應用的添加操作
進入microservice服務管理界面
六、添加服務
把自己的微服務都部署到相應的應用中,便於管理。下面演示如何添加服務到應用中。
=================================================================
提示:
由於下面要演示添加docker微服務部署前面的章節中的eureka、article、zuul服務,如果是按照前面章節一章一章操作的同學,可能現在docker中已經有正在運行的eureka、article和zuul服務。為了和下面要演示的內容有沖突,故需要把這三個服務停止掉,並刪除,只保留鏡像。 刪除的步驟為:
- 先通過docker ps -a查看容器中的所有服務,在NAMES下查看是否有eureka等服務,STATUS為該服務對應的狀態(UP為正在運行,Exited為已經停止)
- 通過docker stop xx(xx為上一步中NAMES中的名稱),停止正在運行的服務。
- 最後通過docker rm xx(xx為第1步中NAMES的名稱),刪除服務。
=================================================================
6.1 添加eureka服務
添加第一個服務:eureka服務。
在上面的最後一個界面,也就是microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面
配置詳解:
名稱、描述,都是rancher中標識用的。
選擇鏡像輸入eureka,因為名為eureka的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。
點擊添加映射端口,第一個7000位主機公開端口,第二個7000位私有容器端口。
最後滾動到頁面最下面,點擊創建,完成eureka服務的創建。
回到microservice應用的服務列表管理界面,可以看到eureka已經啟動。可點擊最右邊豎著的...,然後進行升級鏡像,重啟、停止、刪除服務操作等。
可在瀏覽器中訪問http://192.168.31.181:7000/訪問eureka服務
6.2 添加aritcle服務
在microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面
配置詳解:
名稱、描述,都是rancher中標識用的。
選擇鏡像輸入article,因為名為article的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。
點擊添加映射端口,第一個9001位主機公開端口,第二個9001位私有容器端口。
最後滾動到頁面最下面,點擊創建,完成article服務的創建。
回到microservice應用的服務列表管理界面,可以看到article已經啟動。(因為article中需要訪問mysql,如果mysql服務沒有部署,或者mysql中沒有相應的數據庫等,出啟動報錯,然後一直循環啟動,如下圖所示)
可點擊服務名article,進入article服務詳情頁面,點擊article的容器標簽,在article的狀態為Running狀態下,點擊右邊豎著的...,然後點擊查看日誌,如圖:
如果此時,你把上面的錯誤:“Communications link failure”和“The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server”,拿去百度一下,發現都是一堆讓你修改Mysql的連接時間之類的,這些答案簡直就是瞎扯。
原因很簡單,就是因為mysql服務沒有啟動。(以上是為了演示當添加服務啟動失敗時,如何查看日誌)。
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ... 652a36962b86 centos/mysql-57-centos7 "container-entrypoin…" 3 days ago Exited (0) 31 hours ago mysql
...
# 可以看到myql的STATUS為Exited(0)表示沒有啟動,下面啟動mysql
$ sudo docker start mysql
mysql
此時再來microservice應用的服務列表管理界面,可以看到article已經啟動成功了。
看看eureka管理界面中,article服務是否已經註冊上來
也可通過瀏覽器訪問article服務
6.3 添加zuul服務
在microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面
配置詳解:
名稱、描述,都是rancher中標識用的。
選擇鏡像輸入zuul,應為名為zuul的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。
點擊添加映射端口,第一個9001位主機公開端口,第二個9001位私有容器端口。
最後滾動到頁面最下面,點擊創建,完成zuul服務的創建。
回到microservice應用的服務列表管理界面,可以看到zuul已經啟動。
看看eureka管理界面中,zuul服務是否已經註冊上來
也可通過zuul的網關代理,來訪問article服務
6.4 添加mysql服務(可選步驟,但推薦觀看,學習下rancher中,添加服務時,如何配置環境變量,以及在容器中執行命令行)
上面我們已經把eureka、article、zuul三個服務,都移植到了通過rancher來管理。唯獨剩下一個mysql服務,然後也在被rancher管理,但是沒有放到rancher的某個應用中,如果是多數據源系統,則不同的應用需要不同的數據庫。
剛說了mysql也被rancher管理,怎麽沒看到呢?其實就是在主機裏,下面的獨立容器中,可以看到mysql服務,該mysql服務,和應用中的服務是一樣的,都可方便的進行操作,和查看日誌等等。
那麽如何把mysql也放到應用中呢?(目的是為了演示如何在添加服務時,配置環境變量)
可以看到mysql當前處於啟動狀態,首先我們需要把該mysql服務停止並刪除掉。註意:刪除mysql之前,記得把mysql中的數據先導出來,備份一下(可使用Navicat工具,連接數據庫,導出結構和數據)。
可通過點擊上圖中mysql後面豎著的三點來選擇停止和刪除,也可通過如下命令進行停止和刪除。
$ sudo docker stop mysql $ sudo docker rm mysql
然後點擊頂部導航欄中的應用,選擇全部,回到全部應用列表管理界面
可點擊添加服務,(和點擊microservice進入microservice應用的服務列表管理界面,再點擊添加服務,效果是一樣的)
進入添加服務界面
配置詳解:
名稱、描述,都是rancher中標識用的。
選擇鏡像輸入centos/mysql-57-centos7,因為我pull下來的不是名為mysql的鏡像,而是pull的一個名為centos/mysql-57-centos7的mysql鏡像。而且該centos/mysql-57-centos7的鏡像,已經在鏡像本地倉庫(docker images中可以查看到),所以取消創建前總是拉去鏡像的勾選。
點擊添加映射端口,第一個3306位主機公開端口,第二個3306位私有容器端口。
在命令標簽頁,環境變量處,點擊添加環境變量,把MYSQL_ROOT_PASSWORD=123456粘貼進去。
最後點擊創建,完成mysql服務的創建。
回到microservice應用的服務列表管理界面,可以看到mysql已經啟動。
如果我們此時再訪問article服務,會發現訪問不了,出現500錯誤。
我們點擊article進入article服務,查看article運行日誌,可以看到原來是無法連接docker數據庫
通過Naticat軟件,是可以連接到該mysql服務的,但是該數據庫裏,卻沒了我們的數據庫docker,以及相關的表和數據(這也就是為什麽讓大家在刪除前先備份的原因)。
我們通過Naticat新建一個數據庫docker,字符集為utf8,排序規則為utf8_general_ci,創建好數據庫之後。在數據庫docker下,在表上右鍵,選擇運行SQL文件,在打開的窗口中,選擇前面備份的docker.sql文件,然後點擊開始即可。推薦使用這種外部工具導入的方式,回復數據庫中數據。
除上訴方式外,也可通過點擊mysql服務,選擇容器標簽,然後點擊後面豎著的三點,點擊執行命令行(該中方式會有問題,具體什麽問題,接著往下看)
然後在打開的黑乎乎的命令行界面,執行如下命令:
mysql -u root -p #在出現Enter password:時,按回車,連接mysql數據庫,進入mysql>命令行模式 #查看當前所有數據庫,發現並沒有一個名為docker的數據庫 show databases; #創建docker數據庫,指定字符集和排序規則 create database docker default character set utf8 collate utf8_general_ci; #選擇docker數據庫 use docker; #創建tb_article表 CREATE TABLE `tb_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL, `author` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `add_time` datetime(0) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; #插入數據INSERT INTO `tb_article` VALUES (1, ‘docker‘, ‘部署微服務‘, ‘tom‘, ‘2019-03-20 08:00:00‘);
界面如下圖所示:
註意:該命令行模式,不支持中文輸入,所以,上面的insert語句中的content字段的內容“部署微服務”,被自動替換為空。以上演示,主要是告訴大家如何在rancher中使用命令行,以及需要註意的地方。
到此,docker數據庫已經創建好了,並有了相應數據,此時,我們再來刷新article服務看看:
好了,到此,把手動創建服務,改造成在rancher中創建服務,已經完成。
docker微服務部署之:七、Rancher進行微服務擴容和縮容
docker微服務部署之:六、Rancher管理部署微服務