持续继承与容器管理
导航
一. 今日目标与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>/</targetPath> <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> ~~~
如图所示:
- 上半部分:
- 下半部分
这里面的ip地址,需要根据自己的ip地址进行改变;imageName配置的是镜像地址,baseImage是jdk版本(相当于 FROM jdk1.8),entryPoint是入口点(相当于ENTRYPOINT);resources是源,指定路径(相当于ADD app.jar);
使用Maven插件,实际上就相当于代替了Dockerfile。dockerfile实际如图:
- 执行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点击选择健体中文,如图所示: