使用GIT+JENKINS+DOCKER+SONAR+DISCONF+HARBOR+TOMCAT实现持续部署CD(下)

一、Docker api学习

目前生产中有使用docker1.8和docker1.10版本,下面针对1.10版本的docker进行说明:
默认情况下 Docker 的守护进程启动会生成一个 socket (/var/run/docker.sock)进程通信文件,而并没有监听端口,只能在本机操作 Docker。如果想在其它地方操作 Docker 主机,就需要让 Docker 主机监听一个端口号,这样可以通过端口号就能实现远程操作,如果想通过api调用并管理docker,这里可以打开2375端口实现,具体配置如下:
“`bash
[root@docker ~]# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/docker daemon –tls=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 #添加此配置
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
[root@docker ~]# netstat -lntp|grep 2375
tcp6 0 0 :::2375 :::* LISTEN 21294/docker
““
重启docker daemon后,就可以对此docker daemon的机器进行远程执行docker命令了,实现方法也很简单:
docker -H hostip:2375 cmd,后续会有很多实用
这里只对docker API进行简单的说明,各语言对docker的api实用都有现成的模块封装,通过 pip install python,就可以在python中使用docker模块创建对象进行api调用,也是很方便的。所以docker api是个很好的工具提供给我们实现远程调用和管理,也是很好内容提供给其他接口提供工具开发,例如监控,镜像容器等管理,方便之余就要考虑使用安全了,参考:http://www.0791quanquan.com/news_keji/topic_1662413/

二、docker仓库之harbor

2.1docker registry

安装部署一个私有的Docker Registry是引入、学习和使用 Docker 这门技术的必经之路之一。尤其是当Docker被所在组织接受,更多人、项目和产品开始接触和使用Docker时,存储和分发自制的Docker image便成了刚需。Docker Registry一如既往的继承了“Docker坑多”的特点,为此这里将自己搭建”各类”Registry过程中执行的步骤、遇到的问题记录下来,为己备忘,为他参考。
Docker在2015年推出了 distribution 项目,即Docker Registry 2。相比于 old registry ,Registry 2使用Go实现,在安全性、性能方面均有大幅改进。Registry设计了全新的Rest API,并且在image存储格式等方面不再兼容于old Registry。去年8月份,docker官方hub使用Registriy 2.1替代了原先的old Registry。如果你要与Registry2交互,你的Docker版本至少要是Docker 1.6。
Docker的开发者也一直在致力于改善Registry安装和使用的体验,通过提供 官方Registry Image 以及 Docker Compose工具 等来简化Registry的配置。不过在本文中,我们只是利用Docker以及Registry的官方Image来部署Registry,这样更便于全面了解Registry的部署配置细节。
Registry2在镜像存储方面不仅支持本地盘,还支持诸多主流第三方存储方案。通过分布式存储系统你还可以实现一个分布式Docker Registry服务。这里仅以本地盘以及single node registry2为例。

2.2 引入harbor

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

Harbor的特征介绍

  • 基于角色的访问控制
    用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制
    镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面
    用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持
    Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理
    所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化
    已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API
    RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单
    提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
    在此使用harbor替换了官方的registry,配置地址为docker-registy.hexun.com,通过api对获取版本,实现了版本回退机制,后续会有说明

如果详细链接请移步本博客的关于harbor的文章:http://www.52devops.com/chuck/1319.html

二、jenkins+docker+harbor集成

大致将此部分分为两个内容,第一个是docker image的构建过程,第二个过程为docker run的过程,下面开始一步步讲解。

2.1 build docker image

通过之前打包好的war包在此构建docker image,push到仓库,然后通过docker api远程run docker 容器,废话不多说下面开始详细过程,继续回到jenkins操作
新建==>构建一个自由风格的软件项目==>进入项目,接下来之前提到的创建项目都不提了,直接构建步骤

构建完镜像就可以触发接下来的运行docker容器的操作了,通过jenkins的功能触发下一个jenkins job

2.2 发版or回退

上文中提到了触发项目的配置,接下来就跟随项目触发来完善整个流程了,新建一个上文提到的A-platform-admin项目,如下

选择参数化构建,提供用户选择发版还是回滚,默认是发版,所以可以直接通过构建镜像来触发发版,如果是回滚就可以直接从这里当做入口,不需要构建镜像,输入之前的镜像版本来实现直接回退即可。

确定了发版还是回退之后或者版本号后,就可以准备运行多个docker景象了,如果继续在这里写Execute shell就会串行运行docker,会运行的很慢,所以在此使用了触发的方式,并行在机器上运行docker容器,触发配置如下:

2.2 run docker container

上文中已经说的很清楚了,接下来的工作就是运行docker容器,直接开始

接下来就是执行远程调用docker api的过程了,通过docker remote api在远程主机上运行docker

到此位置,已经在一个节点上运行起docker容器了,如果多个节点,拷贝复制改地址即可。

三、其他组件的搭配使用

由于未引入docker集群(k8s等)管理,在这里对于开发管理docker就是很不方便了,而且对docker监控也缺少了一个完善的工具,对docker内人日志收集也是一个问题,现在开始就介绍几个实用的工具,方便大家入手

3.1 pinponit监控

下面给大家介绍一个开源的 APM (Application Performance Management/应用性能管理)工具 – Pinpoint。一个分布式事务跟踪系统的平台,思路基于google Dapper,用于基于Java的大规模分布式系统,通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。Pinpoint的目标就是为n(n>=1)层架构开发新的跟踪平台,为n层架构的系统提供解决方案。pinpoint 有3个主要组件组成:日志收集器[Collector]、控制台[Web]、代理[Agent],采用Hbase进行存储。 Collector和Web都是WAR包,Agent采用一个JAVA应用程序加载。
Pinpoint的特点如下:

  • 分布式事务跟踪,跟踪跨分布式应用的消息
  • 自动检测应用拓扑,帮助你搞清楚应用的架构
  • 水平扩展以便支持大规模服务器集群
  • 提供代码级别的可见性以便轻松定位失败点和瓶颈
  • 使用字节码增强技术,添加新功能而无需修改代码
  • 安装探针不需要修改哪怕一行代码及trace server端部署简单,支持hdfs存储
  • 具有简单的阀值触发报警功能
  • 移植性比较强的,会比较讨人喜欢(相比cat)
  • 插件化功能可扩展
    下面是pinpoint的github地址
    使用情况如图所示:

3.2 cAvisor +open-falcon实现docker资源监控

新版open-falcon提供了支持 cAvisor 的数据输入功能,通过 cAvisor 来获取docker资源情况,将数据输入到open-falcon,即可实现每个容器的实时使用情况,并且cAvisor支持将数据源输入到时许数据库influxDB,通过grafana进行聚合等展示

3.3 portainer管理工具

portainer 是一款docker容器管理工具,基于swarmkit提供了图形化的管理界面。功能主要包含:

  1. 镜像管理
  2. 网络管理
  3. 数据卷管理
  4. 应用模板
  5. 状态面板
    类似工具还有crane、 rancher和docker datacenter(ddc,收费的)。 这里面portainer和rancher相对比较成熟,而且也是免费和开源的。
    最重点的是portainer支持多个endpoint接入,方便对多个宿主机的docker容器的管理,相比shipyard要好的多,可视化很强,用起来很带感哦。代之食用如图:


3.4日志手机分析

对于docker内的日志,这里使用ELK进行收集分析,每个项目都将日志挂载到宿主机的文件系统内,方便收集。ELK架构图大致如下:

架构图中,每个节点通过filebeat做成的docker镜像收集日志,并输入到kafka集群中,kafka集群作为中间件,可将消费多方向实用,再通过logstash将数据读取,把数据输送给ES做存储,最后通过kibana做实时展示。

6
未经许可,不得转载,否则将受到作者追究,博主联系方式见首页右上角

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论
取消评论
代码 贴图 加粗 链接 删除线 签到