docker微服務部署之:6、Rancher管理部署微服務

docker微服務部署之:5、利用DockerMaven插件自動構建鏡像html

1、 什麼是Rancher

Rancher是一個開源的企業級容器管理平臺。經過Rancher,企業不再必本身使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。mysql

Rancher官網:https://rancher.comsql

2、Docker中下載Rancher鏡像並運行

#Rancher鏡像下載
$ sudo docker pull rancher/server
$ sudo docker images | grep rancher/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的啓動會有點慢,可能須要等一下子)docker

全是英文,看不懂?不要緊,能夠點擊右下鍵的English,選擇語言爲簡體中文。數據庫

3、Rancher環境管理

     Rancher的做用就是用來管理Docker容器的環境。能夠經過Rancher的環境管理,來管理不一樣團隊的Docker環境。每套Ranhcer環境之間,都是隔離的,相互之間沒有影響。centos

3.1. 添加環境

     點擊頂部導航欄的Default,點擊環境管理瀏覽器

     

    進入了環境管理界面,點擊添加環境架構

    

    打開了添加環境界面,輸入相應名稱和描述,並選擇環境模板,最後點擊建立,完成環境的添加。微服務

    

    在環境列表界面,能夠看到已經建立好了一個名爲test的環境,而且該環境已經完成了啓動。工具

   

3.2.在環境中,管理docker中的微服務

     首先切換到剛建立的test環境。點擊頂部導航欄的Default,點擊test

  

   打開了test中的用戶應用管理界面

  

4、配置主機

    切換到了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地址,內存一級硬盤等等,還有容器中的服務,以及這些服務的狀態。

5、往Docker主機中添加應用

   上面已經作了這麼多,那麼如何把本身的服務部署到docker中。

    服務都是放在應用中,因此須要先建立一個應用。

    建立應用的步驟以下:

    首先,點擊頂部導航欄中的應用,點擊所有

     打開應用列表管理界面,能夠看到有4個應用,就是剛剛執行復制的代碼腳本,在docker中運行了這4個應用。而且該4個應用最前面的圖標都是綠色的,表示處於運行狀態。

     點擊添加應用,給應用取個名字,並添加描述,而後點擊建立,完成應用的添加操做

 

   進入microservice服務管理界面

6、添加服務

   把本身的微服務都部署到相應的應用中,便於管理。下面演示如何添加服務到應用中。

  =================================================================

   提示:

          因爲下面要演示添加docker微服務部署前面的章節中的eureka、article、zuul服務,若是是按照前面章節一章一章操做的同窗,可能如今docker中已經有正在運行的eureka、article和zuul服務。爲了和下面要演示的內容有衝突,故須要把這三個服務中止掉,並刪除,只保留鏡像。 刪除的步驟爲:

  1. 先經過docker ps -a查看容器中的全部服務,在NAMES下查看是否有eureka等服務,STATUS爲該服務對應的狀態(UP爲正在運行,Exited爲已經中止)
  2. 經過docker stop xx(xx爲上一步中NAMES中的名稱),中止正在運行的服務。
  3. 最後經過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微服務部署之:7、Rancher進行微服務擴容和縮容

相關文章
相關標籤/搜索