持续集成与容器管理
DockerMaven 插件
微服务部署有两种方法:
(1)手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器。
(2)通过Maven插件自动部署。
通过DockerMaven插件自动制作镜像,并上传到私有仓库
Maven插件自动部署步骤:
(1)修改宿主机的docker配置,让其可以远程访问
vi /lib/systemd/system/docker.service
在ExecStart=后添加配置 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
2)刷新配置重启服务
systemctl daemon-reload
systemctl restart docker
(3) 在工程的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>1.0.0</version>
<configuration>
<imageName>192.168.0.88:5000/${project.artifactId}:${project.version}</imageName>
<baseImage>java</baseImage>
<maintainer>huhengzhang 1205475282@qq.com</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 远程仓库地址 -->
<dockerHost>http://192.168.0.88:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
(4) maven命令操作
Mvn install
mvn docker:build -DpushImage
(5) 进入宿主机,docker images 查看制作的镜像
2 持续集成工具-Jenkins
持续集成 Continuous integration ,简称CI
随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过
程中不可回避的问题。持续集成正它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
持续集成具有的特点:
它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
jenkins 简介
Jenkins它是一个开源的实现持续集成的软件工具。官方网站:http://jenkins-ci.org/。Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
jenkins 安装 参照官方文档
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
sudo yum upgrade
sudo yum install epel-release java-11-openjdk-devel
sudo yum install jenkins
sudo systemctl daemon-reload
# 配置jenkins 修改用户名和端口
vi /etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_PORT="8888"
启动jenkins
systemctl start jenkins
密码从 cat /var/lib/jenkins/secrets/initialAdminPassword
501447f1f879418a97b36c26156f41b3
在搭建jenkins 时,本地配置了java环境,但是启动jenkins时候使用默认环境导致启动失败
解决办法配置软连接:
ln -s /usr/local/java/jdk1.8.0_161/bin/java /usr/bin/java
jenkins 插件安装
点击左侧的系统管理,选择插件管理
全局工具配置
安装Maven与本地仓库
1. 将Maven 压缩包上传到服务器中
2. 解压maven
tar -zxvf apache-maven-3.5.4-bin.tar.gz
3. mv apache-maven-3.5.4 /usr/local/maven/
4. 编辑setting.xml 配置本地仓库目录
<localRepository>/usr/local/repository</localRepository>
5.将本地仓库中jar包上传到对应服务器仓库中,减少后续打包时间
全局工具配置,配置jdk、git、maven
JDK 配置
Git 配置
maven 配置
代码上传到git仓库 可以利用gitee或者github 也可以搭建自己的git服务器
Gogs 是一款极易搭建的自助 Git 服务。Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。
搭建步骤:
(1)拉取镜像创建容器
docker pull gogs/gogs
docker run -id --name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs
(2) 浏览器访问192.168.0.88:3000
选择数据库类型,修改域名和应用url
(3)新建远程仓库
(4)将本地代码提交到远程仓库中
1.首先需要初始化工程 git init
2.添加远程仓库地址
jenkins 任务创建
- 新建任务
2.源码管理配置git地址和build 路径
3.执行构建任务
构建成功后可以在宿主机上查询镜像
容器管理工具Rancher
Rancher 是一个开源的容器部署和管理的平台,Rancher为容器运行提供一系列基础架构服务:网络服务、存储服务、主机管理、负载均衡…通过jenkins构建出镜像,然后通过Rancher 去管理容器实现一键式应用部署和管理
Rancher 安装
(1)拉取Rancher 镜像
docker pull rancher/server
(2) 创建Rancher server 容器
docker run -id --name=rancher -p 9090:8080 rancher/server
(3) 浏览器访问 192.168.0.88:9090
Rancher 初始化
1.环境管理,添加环境 开发环境、测试环境、生产环境
2. 在环境中添加主机:
在需要添加主机的服务器上运行脚本
3.添加应用,应用其实就是我们想要运行的工程项目, 用户下添加应用
应用部署
mysql 部署 选择mysql 镜像,添加端口映射和环境变量
RabbitMQ 部署
镜像:rabbitmq:management 端口映射:5671 5672 4369 15671 15672 25672
Redis 部署
镜像:redis 端口映射6379
微服务部署:
选择微服务镜像 和添加端口映射
Rancher 扩容与缩容
扩容:
(1)将Rancher之前创建的微服务(基础信息微服务)删除
(2)重新创建微服务 ,不设置端口映射
(3)在选择菜单API -->WebHooks ,点击“添加接收器”按钮
(4)填写名称等信息,选择要扩容的服务,点击创建按钮
(5)接收器列表中新增了一条记录 ,点击触发地址将地址复制到剪切板
(6)使用postman测试:
发送成功后发现容器由1个变成3个
缩容 与扩充步骤不一致的地方是在选择接收器的时候选择缩容
负载均衡
上面已经实现对容器进行扩容,因为没有进行端口映射所以无法直接访问,Rancher 提供了专门的负载均衡器服务。添加服务旁边的箭头添加负载均衡服务
influxDB
influxDB是一个分布式时间序列数据库。用来存储容器运行的监控数据,需要结合cAdvisor 工具使用,cAdvisor仅仅显示实时信息,但是不存储监视数据。因此,我们需要提供
时序数据库用于存储cAdvisor组件所提供的监控信息,以便显示除实时信息之外的时序数据
influxDB安装
(1)下载镜像
docker pull tutum/influxdb
(2) 运行容器
docker run -id -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 --name=influxsrv tutum/influxdb
(3) 通过8083 端口访问web管理台 8086端口用来写数据
influxdb 常用操作
- 创建数据库
CREATE DATABASE "cadvisor"
- 创建用户
CREATE USER "cadvisor" WITH PASSWORD 'cadvisor' WITH ALL PRIVILEGES
- 用户授权
grant all privileges on cadvisor to cadvisor
grant WRITE on cadvisor to cadvisor
grant READ on cadvisor to cadvisor
- 查看采集数据
SHOW MEASUREMENTS
如果想采集系统的监控数据,需要通过cAdvisor 软件来监控产生
cAdvisor
Google开源的用于监控基础设施应用的工具,它是一个强大的监控工具,不需要任何配置就可以通过运行在Docker主机上的容器来监控Docker容器,而且可以监控Docker主机
cAdvisor 安装
(1) 拉取镜像