docker微服務部署之:5、利用DockerMaven插件自動構建鏡像html
Rancher是一個開源的企業級容器管理平臺。經過Rancher,企業不再必本身使用一系列的開源軟件去從頭搭建容器服務平臺。Rancher提供了生產環境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺。mysql
Rancher官網:https://rancher.comsql
#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,選擇語言爲簡體中文。數據庫
Rancher的做用就是用來管理Docker容器的環境。能夠經過Rancher的環境管理,來管理不一樣團隊的Docker環境。每套Ranhcer環境之間,都是隔離的,相互之間沒有影響。centos
點擊頂部導航欄的Default,點擊環境管理瀏覽器
進入了環境管理界面,點擊添加環境架構
打開了添加環境界面,輸入相應名稱和描述,並選擇環境模板,最後點擊建立,完成環境的添加。微服務
在環境列表界面,能夠看到已經建立好了一個名爲test的環境,而且該環境已經完成了啓動。工具
首先切換到剛建立的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中。
服務都是放在應用中,因此須要先建立一個應用。
建立應用的步驟以下:
首先,點擊頂部導航欄中的應用,點擊所有
打開應用列表管理界面,能夠看到有4個應用,就是剛剛執行復制的代碼腳本,在docker中運行了這4個應用。而且該4個應用最前面的圖標都是綠色的,表示處於運行狀態。
點擊添加應用,給應用取個名字,並添加描述,而後點擊建立,完成應用的添加操做
進入microservice服務管理界面
把本身的微服務都部署到相應的應用中,便於管理。下面演示如何添加服務到應用中。
=================================================================
提示:
因爲下面要演示添加docker微服務部署前面的章節中的eureka、article、zuul服務,若是是按照前面章節一章一章操做的同窗,可能如今docker中已經有正在運行的eureka、article和zuul服務。爲了和下面要演示的內容有衝突,故須要把這三個服務中止掉,並刪除,只保留鏡像。 刪除的步驟爲:
=================================================================
添加第一個服務:eureka服務。
在上面的最後一個界面,也就是microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面
配置詳解:
名稱、描述,都是rancher中標識用的。
選擇鏡像輸入eureka,由於名爲eureka的鏡像,已經在鏡像本地倉庫(docker images中能夠查看到),因此取消建立前老是拉去鏡像的勾選。
點擊添加映射端口,第一個7000位主機公開端口,第二個7000位私有容器端口。
最後滾動到頁面最下面,點擊建立,完成eureka服務的建立。
回到microservice應用的服務列表管理界面,能夠看到eureka已經啓動。可點擊最右邊豎着的...,而後進行升級鏡像,重啓、中止、刪除服務操做等。
可在瀏覽器中訪問http://192.168.31.181:7000/訪問eureka服務
在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服務
在microservice應用的服務列表管理界面,點擊添加服務,打開服務編輯界面
配置詳解:
名稱、描述,都是rancher中標識用的。
選擇鏡像輸入zuul,應爲名爲zuul的鏡像,已經在鏡像本地倉庫(docker images中能夠查看到),因此取消建立前老是拉去鏡像的勾選。
點擊添加映射端口,第一個9001位主機公開端口,第二個9001位私有容器端口。
最後滾動到頁面最下面,點擊建立,完成zuul服務的建立。
回到microservice應用的服務列表管理界面,能夠看到zuul已經啓動。
看看eureka管理界面中,zuul服務是否已經註冊上來
也可經過zuul的網關代理,來訪問article服務
上面咱們已經把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中建立服務,已經完成。