持續繼承與容器管理
導航
一. 今日目標與DockerMaven插件
1.1 學習目標
- 掌握DockerMaven插件的使用
- 掌握持續集成工具jenkins的安裝與使用
- 掌握容器管理工具Rancher的安裝與使用
- 掌握時間序列數據庫influxDB的安裝與使用
- 掌握容器監控工具cAdvisor的安裝與使用
- 掌握圖標工具Grafana的使用
1.2 DockerMaven插件
-
微服務部署的方法:
- 第一種是手動部署:首先基於源碼打包生成jar包(或war包),將jar(或war包)上傳至虛擬機並拷貝至JDK容器。
- 第二種是通過Maven插件自動部署:對於數量衆多的微服務,手動部署無疑是非常麻煩的做法,並且容易出錯。所以我們這裏學習如何自動部署,這也是企業開發中經常使用的方法。
-
Maven插件部署步驟:
- 修改宿主機的docker配置,可以遠程訪問,打開docker.service:
vi /lib/systemd/system/docker.service
- 其中ExecStart=後添加配置
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
- 如圖所示:
- 如圖所示:
- 刷新配置,重啓服務:
systemctl daemon-reload
systemctl restart docker
docker start registry
- 在工程pom.xml增加配置:
<build> <finalName>app</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>192.168.184.141:5000/${project.artifactId}:${project.version}</imageName> <baseImage>jdk1.8</baseImage> <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targePath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> <dockerHost>http://192.168.184.141:2375</dockerHost> </configuration> </plugin> </plugins> </build> ~~~ 如圖所示: - 上半部分: ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200113171118216.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MTI4MDQ5,size_16,color_FFFFFF,t_70) - 下半部分 ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2020011317114377.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MTI4MDQ5,size_16,color_FFFFFF,t_70) > 這裏面的ip地址,需要根據自己的ip地址進行改變;imageName配置的是鏡像地址,baseImage是jdk版本(相當於 FROM jdk1.8),entryPoint是入口點(相當於ENTRYPOINT);resources是源,指定路徑(相當於ADD app.jar); > 使用Maven插件,實際上就相當於代替了Dockerfile。dockerfile實際如圖: ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200113171639849.png)
- 執行install命令:
mvn install
如圖所示:
- 執行 build命令:
mvn docker:build -DpushImage
- 如圖:
- 如圖:
- 檢查:
- 檢查是否有此鏡像:
docker images
- 檢查私有倉庫是否存在,瀏覽器訪問: http://192.168.184.141:5000/v2/_catalog,如果瀏覽器出現 {“repositories”:[“tensquare_base”]} (每個項目的具體值不一樣,這裏演示項目名叫tensquare_base,根據自己項目來判斷);如圖所示:
- 檢查是否有此鏡像:
- 啓動docker項目:
- 輸入命令:
docker run -di --name=base -p 9001:9001 192.168.184.141:5000/tensquare_base:1.0-SNAPHOT
- 如圖所示:
- 輸入命令:
- 修改宿主機的docker配置,可以遠程訪問,打開docker.service:
二. 持續集成與jenkins
2.1 什麼是持續集成
- 概述:
- 持續集成(Continuous integration),簡稱CI
- 隨着軟件開發複雜度的不斷提高,團隊開發成員間如何更好地協同工作以確保軟件開發的質量已經慢慢成爲開發過程中不可迴避的問題。尤其是近些年來,敏捷(Agile)在軟件工程領域越來越紅火,如何能在不斷變化的需求中快速適應和保證軟件的質量也顯得尤其的重要。
- 持續集成正是針對這一類問題的一種軟件開發實踐。它倡導團隊開發成員必須經常集成他們的工作,甚至每天都可能發生多次集成。而每次的集成都是通過自動化的構建來驗證,包括自動編譯、發佈和測試,從而儘快地發現集成錯誤,讓團隊能夠更快的開發內聚的軟件。
- 持續集成具有的特點:
- 它是一個自動化的週期性的集成過程,從檢出代碼、編譯構建、運行測試、結果記錄、測試統計等都是自動完成的,無需人工干預。
- 需要有專門的集成服務器來執行集成構建;
- 需要有代碼託管工具支持,我們下一小節將介紹Git以及可視化界面Gogs的使用。
- 持續集成的作用:
- 包含團隊開發人員提交代碼的質量,減輕了軟件發佈的壓力;
- 持續集成中的任何一個環境都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間、費用和工作量。
2.2 Jenkins簡介
- Jenkins,原名Hudson,2011年改爲現在的名字,它是一個開源的實現持續集成的軟件工具。官方網站: http://jenkins-ci.org/
- Jenkins 能實施監控集成中存在的錯誤,提供詳細的日誌文件和提醒功能,還能用圖標的形式形象地展示項目構建的趨勢和穩定性。
- 特點:
- 易安裝:僅僅一個 java -jar jenkins.war ,從官網下載該文件後,直接運行,無需額外的安裝,更無需安裝數據庫;
- 易配置:提供友好的GUI配置界面
- 變更支持:Jenkins能從代碼倉庫(Subversion/CVS)中獲取併產生代碼更新列表並輸出到編譯輸出信息中;
- 支持永久鏈接:用戶是通過web來訪問jenkins的,而這些web頁面的鏈接地址都是永久鏈接地址,因此,你可以在各種文檔中直接使用該鏈接;
- 集成E-Mail/RSS/IM:當完成一次集成時,可通過這些工具實時告訴你集成結果(據我所知,構建一次集成需要花費一定時間,喲了這個功能,你就可以在等待結果過程中,幹別的事情);
- JUnit/TestNG測試報告:也就是用以圖表等形式提供詳細的測試報表功能;
- 支持分佈式構建:Jenkins可以把集成構建等工作分發到多臺計算機中完成;
- 文件指紋信息:Jenkins會保存哪次集成構建產生了哪些jars文件,哪一次集成構建使用了哪個版本的jars文件等構建記錄;
- 支持第三方插件:使得Jenkins變得越來越強大;
2.3 Jenkins安裝(它是java開發的)
-
JDK安裝:
- (1)將jdk-8u171-linux-x64.rpm 上傳至服務器(虛擬機)
- (2)執行安裝命令:
rpm -ivh jdk-8u171-linux-x64.rpm
RPM方式安裝JDK,其根目錄爲: /usr/java/jdk1.8.0_171t
-
Jenkins安裝與啓動
-
下載jenkins
wget https://pkg.jenkins.io/redhat/jenkins-2.83-1.1.noarch.rpm
或將jenkins-2.83-1.1.noarch.rpm上傳至服務器
-
安裝jenkins
rpm -ivh jenkins-2.83-1.1.noarch.rpm
-
配置jenkins
vi /etc/sysconfig/jenkins
修改用戶和端口:
~~~java
JENKINS_USER=“root”
JENKINS_PORT=“8888”
~~~ -
啓動服務
systemctl start jenkins
-
打開瀏覽器,輸入鏈接訪問jenkins:
http://192.168.184.135:8888
-
在Linux服務器內輸入以下命令獲得初始密碼串,並寫入到瀏覽器密碼框內
cat /var/lib/jenkins/secrets/initialAdminPassword
如圖所示:
-
選擇左邊系統默認安裝插件(左邊是系統推薦插件,右邊是手動選擇插件)
-
創建用戶:
走到這裏jenkins就已經安裝完成了。
-
2.4 插件安裝
- 我們以安裝Maven插件爲例,演示插件的安裝
- 點擊左側的“系統管理菜單”,然後點擊管理插件,如圖所示:
- 點擊可選插件,然後搜索框輸入maven 然後進行搜索,搜索出結果後找到要安裝的maven插件,然後點擊直接安裝,如圖所示:
- 然後在已安裝插件內就能找到已經安裝的插件了。
- 點擊左側的“系統管理菜單”,然後點擊管理插件,如圖所示:
2.5 安裝maven與本地倉庫
-
概述:
- Jenkins之所以能夠進行持續集成,實際上就是因爲調用了Maven插件,通過Maven插件來執行Maven命令來達到一個持續集成的效果。這個Maven命令就是通過DOckerMaven插件來實現的,所以我們必須在服務器上安裝Maven。
-
安裝Maven與本地倉庫步驟:
- 將Maven 壓縮包上傳至服務器(虛擬機)
- 解壓:
tar zxvf apache-maven-3.5.4-bin.tar.gz
- 移動目錄
mv apache-maven-3.5.4 /usr/local/maven
- 編輯setting.xml配置文件
vi /usr/local/maven/conf/setting.xml
,配置本地倉庫目錄,內容如下:
如圖所示:<localRepository>/usr/local/repository</localRepository>
- 將開發環境的本地倉庫上傳至服務器(虛擬機)並移動到/usr/local/repository 。
執行此步是爲了以後在打包的時候不必重新下載,縮短打包時間。
2.6 全局工具配置
- 告訴Jenkins我們的各種工具的目錄是在哪個位置,這樣Jenkins才能通過插件去調用這些工具。比如需要JDK來完成編譯,需要Git來完成代碼下載,需要Maven完成docker容器創建;
- 打開瀏覽器,輸入地址: http://192.168.182.141:8888/manage ; 點擊 ** 系統管理** ,然後在右側菜單找到全局工具配置 。如圖所示:
- 點擊新增JDK,然後輸入 jdk1.8並在JAVA_HOME中輸入jdk地址:/usr/java/jdk1.8.0_171-amd64。如圖所示:
- Git配置如圖所示:
- Maven配置如圖所示:
基本上所有的配置都是輸入名稱然後給予其相應的路徑即可; 最後別忘了點擊 Save 保存功能;
2.7 gogs安裝與配置
-
概述:
- Gogs是一款極易搭建的自助Git服務;
- Gogs的目標是打造一個最簡單的、最快速和最輕鬆的方式搭建自助Git服務。使用Go語言開發使得Gogs能夠通過獨立的二進制分發,並且支持Go語言支持的所有平臺,包括Linux、Mac OS X、Windows以及ARM平臺。
- 地址: https://gitee.com/Unknown/gogs
-
操作步驟:
- 下載鏡像:
docker pull gogs/gogs
- 創建容器:
docker run -di --name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs
- 假設我的centos虛擬機IP爲192.168.184.141 在地址欄輸入
http://192.168.184.141:3000
會進入首次運行安裝程序頁面,我們可以選擇一種數據庫組委gogs數據的存儲。最簡單的選擇是SOLite3 。
- 下載鏡像:
-
實戰步驟:
-
下載gogs,圖示:
-
創建容器,如圖所示:
如果出現了下方的長字符串,則說明創建成功;
-
打開瀏覽器,訪問:http://192.168.184.141:3000/install 然後填入:數據庫類型以及數據庫文件路徑:
-
將域名改爲我們自己的ip: 192.168.184.141 ; (每個人的ip不同,請按自己的來進行修改)
-
將應用URL 修改爲 我們自己的ip,如圖所示:
按照自己的ip來修改
-
點擊管理員設置,可以自己設置自定義的管理員(圖中僅爲示例),然後點擊立即安裝即可。如圖所示:
-
創建倉庫。上一步安裝完成後,點擊** + **號創建倉庫,如圖所示:
-
爲倉庫給入相關的信息,然後點擊創建倉庫 即可,如圖所示:
-
倉庫創建成功後,可以進入此倉庫,複製url,然後就可以將代碼上傳到此倉庫中了。如圖所示:
-
2.8 將代碼上傳到git
-
概述:
- 此節將會講述一下,如何將代碼上傳到git的步驟;
-
步驟:
- 找到項目,然後右鍵點擊,選擇Git,點擊Repository,再點擊Remotes,如圖所示:
- 出現GitRemotes窗口後,點擊**+**號,然後輸入剛纔的倉庫url,然後點ok即可。如圖所示:
- 先右鍵項目,選擇Git,然後點擊Add ,將項目添加到本地倉庫,如圖所示:
- 繼續右鍵項目,點擊Git,然後點擊Commit Directory,然後將代碼提交到Git倉庫,如圖所示:
- 右鍵項目,點擊Git,然後選擇Repository,點擊Push,然後將代碼提交到Git,如圖所示:
- 這時候會提示輸入密碼,2.7章節創建倉庫的時候創建過賬號(liubei),圖中可以通過此賬號登錄Git,大家登錄的時候,可以根據自己創建的賬號來進行登錄即可。
- 此時瀏覽器中訪問,則已發現代碼已經更新至Git,如圖所示:
- 找到項目,然後右鍵點擊,選擇Git,點擊Repository,再點擊Remotes,如圖所示:
2.9 任務的創建與執行
-
概述:
- 通過在代碼中添加Maven插件,在Jenkins中創建Maven項目,選擇對應的pom.xml文件後即可;然後再控制檯中點擊啓動後,就會自動build項目,將代碼生成的鏡像自動上傳至服務器;
-
操作步驟:
- 回到首頁,點新建按鈕,如下圖,輸入名稱,選擇創建一個Maven項目,點擊Ok,如圖所示:
- 填入描述,然後源碼管理選擇Git,填入Url,如圖所示:
- 查看項目名爲什麼,如圖所示:
- 修改pom.xml,名稱爲: 項目/pom.xml,且在Goals and options輸入Maven配置命令,然後點擊保存 ,如圖所示:
- 回到任務界面,發現 S下的球是灰色的,點擊右側的啓動按鈕,如圖所示:
- 完成後,連接Linux服務器,輸入下方命令:
然後發現maven已經自動將上傳至Git的代碼進行打包並生成鏡像,說明任務創建和執行已經成功,如圖所示:docker images
Maven自動打包這些必須要一個maven插件,如圖所示:
- 回到首頁,點新建按鈕,如下圖,輸入名稱,選擇創建一個Maven項目,點擊Ok,如圖所示:
三. 容器管理工具Rancher
3.1 什麼是Rancher?
- Rancher是一個開源的企業級全棧化容器部署及管理平臺。Rancher爲容器提供一攬子基礎架構服務:CNI兼容的網絡服務、存儲服務、主機管理、負載均衡、防護牆…Rancher讓上述服務跨域公有云、私有云、虛擬機、物理機環境運行,真正實現一鍵式應用部署和管理。
- 官網地址:
http://www.cnrancher.com/
3.2 Rancher安裝
-
下載Rancher鏡像
docker pull rancher/server
-
創建Rancher容器
docker run -di --name=rancher -p 9090:8080 rancher/server
-
在瀏覽器輸入地址:http://192.168.184.136:9090 即可看到此網頁
在設置Rancher的時候,給它分配的內存儘量分配大一點。容器創建後可以使用
docker ps
命令進行查看。啓動時間比較長,一定要耐心等待; -
看到網頁後點擊Get it ,進入頁面,然後再下方的English點擊選擇健體中文,如圖所示: