jenkins+docker集成harbor实现可持续集成的问题小结

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录一、前言二、Harbor介绍2.1 什么是Harbor2.1.1 Harbor架构图2.2 Harbor 特征2.3 Harbor 核心组件2.4 Harbor使用场景三、Harbor部署3.1 安装docker compose3.1.1 安装方式一3.2 基于python3 pip安装docker compose3.2.1 安装python33.2.2 安装python-pip3并升级3.2.3 执行命令安装 docker-compose3.2.4 查看docker-compose版本3.3 安装horbor3.3.1 下载安装包3.3.2 解压安装包3.3.3 修改配置文件3.3.4 执行安装3.3.5 环境检查3.3.6 浏览器访问四、Harbor基本使用4.1 机器准备4.1.1 配置服务器免登4.2 推送镜像到Harbor自定义镜像仓库4.2.1 创建项目4.2.2 修改docker配置文件4.2.3 镜像打标4.2.4 推送镜像4.3 jenkins任务集成Harbor4.3.1 修改jenkins的任务配置4.3.2 重新执行任务4.4 其他机器获取harbor镜像4.4.1 A、B机器添加授信4.4.2 删除并重新推送镜像4.4.3 其他机器获取镜像4.4.4 拉取镜像4.5 使用jenkins任务进行分发镜4.5.1 配置全局ssh凭证4.5.2 配置ssh连接信息4.5.3 配置测试任务五、镜像仓库备选方案5.1 阿里云镜像仓库5.2 dockerhub5.3 Nexus Repository Manager5.4 JFrog Artifactory六、docker可视化管理工具七、写在文末

一、前言

在上一篇,我们搭建了jenkins,并通过配置jenkins任务的方式完成了从拉取代码,到打包构建,最后制作docker镜像的完整步骤。但是到这里,我们会发现仍然有两个问题。

问题一:资源占用:

1、构建出来的镜像仍然留在jenkins这台机器上,久而久之,这台机器的空间将不堪重负;

2、如果直接运行镜像,这些镜像将会占用当前jenkins这台机器的资源,如果后续要运行更多的镜像,这台机器肯定吃不消

问题二:缺少镜像的统一分发和管理:

基于问题一,如何管理这些镜像呢?既然镜像不能一直留在这台jenkins机器,就需要引入其他的容器管理平台,该平台能够实现docker镜像的常规管理,比如容器的启停,删除,pull、push等操作。

基于上述这两个最紧迫的问题,该使用什么方法解决呢?这就需要引入docker的镜像管理工具。本文以Harbor为例进行详细的说明。

二、Harbor介绍

官方文档:Harbor docs | Harbor 1.10 Documentation

2.1 什么是Harbor

Harbor 是一个开源的容器镜像仓库,它提供了一个安全、可信赖的方式来存储和管理容器镜像。Harbor 支持用户创建自己的私有镜像仓库,可以在其中存储各种容器镜像,并且可以对这些镜像进行权限管理、漏洞扫描、复制、备份等操作。Harbor 还提供了 Web 界面和 RESTful API,使用户可以方便地进行镜像管理和操作。通过 Harbor,用户可以更加轻松地构建、部署和运行容器化应用。 2.1.1 Harbor架构图

jenkins+docker集成harbor实现可持续集成的问题小结插图

2.2 Harbor 特征

Harbor 具备如下特征:

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

2.3 Harbor 核心组件

结合上述Harbor的架构,下面总结一下Harbor中涉及到的组件。

Harbor的Registry,UI,token等服务,通过一个前置的反向代理统一接收浏览器、Dockerfile客户端的请求,并将请求转发给后端不同的服务。

Registry

负责存储Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token,Registry会通过公钥对token进行解密验证。

Core services

这是Harbor的核心功能,主要提供以下服务

UI:提供图形化界面,帮助用户管理Registry上的镜像,并对用户进行授权WebHook:为了及时获取Registry上image状态变化的情况,在Registry上配置webhook,把状态变化传递给UI模块。Token:负责根据用户权限给每个docker push/pull命令签发token,Docker客户端向-Registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求

Database

为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据

Job Services

提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中。

Log Collector

为了帮助监控Harbor运行,负责收集其组件的log,供日后进行分析。

2.4 Harbor使用场景

Harbor主要有如下使用场景

构建和管理私有镜像仓库:组织可以使用Harbor搭建自己的私有Docker Registry,方便存储和管理内部开发的镜像,保护知识产权和数据隐私。安全性管理:Harbor支持用户认证、访问控制、镜像签名等安全功能,确保镜像的安全性,防止恶意镜像的注入。镜像复制和同步:Harbor可以配置多个节点,实现镜像的复制和同步,方便在不同地区或部门之间共享镜像。CI/CD集成:Harbor可以与CI/CD工具集成,如Jenkins、GitLab等,实现自动化构建、测试和部署。

接下来,将演示基于centos7系统演示如何搭建Harbor。

三、Harbor部署

3.1 安装docker compose

由于Harbor在后续对docker镜像管理和操作中,需要进行镜像的编排,需要用到docker compose,因此先安装docker compose。参考下面的步骤进行安装,这里提供了两种方式进行选择。

3.1.1 安装方式一

参照下面的命令执行安装

#获取安装包 sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose #授权 chmod +x /usr/local/bin/docker-compose #创建软连接 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #查看docker-compose版本 docker-compose –version

jenkins+docker集成harbor实现可持续集成的问题小结插图1

在实际操作时发现,使用这种方式安装在拉取github的包时会非常慢,下面推荐第二种方式安装。

3.2 基于python3 pip安装docker compose

3.2.1 安装python3 sudo yum install python3

jenkins+docker集成harbor实现可持续集成的问题小结插图2

3.2.2 安装python-pip3并升级 yum -y install python3-pip pip3 install –upgrade pip

jenkins+docker集成harbor实现可持续集成的问题小结插图3

3.2.3 执行命令安装 docker-compose pip3 install docker-compose

jenkins+docker集成harbor实现可持续集成的问题小结插图4

3.2.4 查看docker-compose版本 docker-compose –version

jenkins+docker集成harbor实现可持续集成的问题小结插图5

最后重启docker

jenkins+docker集成harbor实现可持续集成的问题小结插图6

3.3 安装horbor

3.3.1 下载安装包

版本可以自行选择,推荐使用2.x版本的

wget –no-check-certificate https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz

jenkins+docker集成harbor实现可持续集成的问题小结插图7

jenkins+docker集成harbor实现可持续集成的问题小结插图8

3.3.2 解压安装包

jenkins+docker集成harbor实现可持续集成的问题小结插图9

3.3.3 修改配置文件

进入解压后的harbor目录,修改 harbor.yml.tmpl 配置文件,注意复制一个配置文件

cp harbor.yml.tmpl harbor.yml

jenkins+docker集成harbor实现可持续集成的问题小结插图10

修改hostname:

jenkins+docker集成harbor实现可持续集成的问题小结插图11

注释https

后续使用https访问的时候可以再配置,这里演示使用http;

jenkins+docker集成harbor实现可持续集成的问题小结插图12

需要关注的其他配置

默认监听端口;初始化密码;

jenkins+docker集成harbor实现可持续集成的问题小结插图13

3.3.4 执行安装

配置修改完成,保存退出之后,直接调用目录下的安装脚本,这个过程可能比较漫长

jenkins+docker集成harbor实现可持续集成的问题小结插图14

直到看到下面的信息

jenkins+docker集成harbor实现可持续集成的问题小结插图15

补充

如何移除harbor已经安装的容器呢,使用命令:docker-compose down

3.3.5 环境检查

使用docker ps 命令检查一下,可以看到harbor启动了很多个容器

jenkins+docker集成harbor实现可持续集成的问题小结插图16

3.3.6 浏览器访问

浏览器访问 IP:80,就来到下面的登录页面,登录账户:admin/Harbor12345

jenkins+docker集成harbor实现可持续集成的问题小结插图17

登录之后来到如下控制台主页

jenkins+docker集成harbor实现可持续集成的问题小结插图18

界面上的各个菜单的功能有兴趣的同学可以继续深入研究,这里不再过多展开了。

四、Harbor基本使用

4.1 机器准备

为了后面的效果演示,需要准备两台服务器

机器作用备注机器A部署jenkins,Harbor服务内存需要大点,上一篇使用该机器部署jenkins机器B业务服务器,部署docker镜像使用 4.1.1 配置服务器免登

为了在jenkins配置任务时能够方便的操作远程机器,建议设置下免登,即配置jenkins机器与目标业务服务器的免登授信操作,参考下面的操作步骤

机器A执行下面的命令

ssh-keygen -t rsa

jenkins+docker集成harbor实现可持续集成的问题小结插图19

将上一步生成的文件远程拷贝到机器B的相应目录下

cd .ssh scp ./id_rsa.pub root@B机器公网IP:/root/.ssh/authorized_keys

拷贝完成后,使用ssh命令登录下B机器

jenkins+docker集成harbor实现可持续集成的问题小结插图20

4.2 推送镜像到Harbor自定义镜像仓库

4.2.1 创建项目

即创建一个新的仓库,用于管理镜像

jenkins+docker集成harbor实现可持续集成的问题小结插图21

创建完成后,列表中多了一条数据

jenkins+docker集成harbor实现可持续集成的问题小结插图22

4.2.2 修改docker配置文件

将下面的这行配置添加到docker的daemon.json文件中,找到insecure-registries标签追加即可

cd /etc/docker vi daemon.json Harbor部署的服务机器IP:80

jenkins+docker集成harbor实现可持续集成的问题小结插图23

加载配置文件并重启docker

systemctl daemon-reload systemctl restart docker 4.2.3 镜像打标

在上一篇中,我们通过jenkins构建出来了一个springboot工程的镜像

jenkins+docker集成harbor实现可持续集成的问题小结插图24

但是如果要将这个镜像直接推送到Harbor仓库还不行,必须要按照Harbor的要求进行命名并重新打标,参考下面的命令执行;

docker tag 996ae7100be7 Harbor服务器地址:80/public/boot-docker:1.0

打完标签之后再次查看镜像,可以发现新的镜像已经显示出来了,细心的同学会发现,它们的镜像名是一样的

jenkins+docker集成harbor实现可持续集成的问题小结插图25

4.2.4 推送镜像

登录Harbor

docker login -u admin -p Harbor12345 Harbor机器IP:8085

jenkins+docker集成harbor实现可持续集成的问题小结插图26

使用下面的命令,推送镜像到Harbor,这个过程根据网络情况可能有点漫长

docker push 打完tag的镜像名

jenkins+docker集成harbor实现可持续集成的问题小结插图27

jenkins+docker集成harbor实现可持续集成的问题小结插图28

push完成之后,可以在Harbor的控制台界面,在public项目中就能看到刚刚推上来的镜像了

jenkins+docker集成harbor实现可持续集成的问题小结插图29

4.3 jenkins任务集成Harbor

基于上一篇中我们在jenkins中创建的测试任务,我们做一下修改,将构建完成的镜像推送至Harbor的仓库中。

4.3.1 修改jenkins的任务配置

在post steps里面,添加如下的脚本(仅供参考,实际操作时还需要结合自身的机器情况),该脚本主要做了下面几件事:

基于Dockerfile将maven构建出来的jar包制作成docker镜像;删除之前通过构建的带标签版本号的镜像;镜像打标签;登录Harbor;将打标签的镜像推送到Harbor的仓库(上面创建的public项目仓库); #!/usr/bin/env bash echo 打包完成,开始构建镜像 #dockerfile:build docker build -t boot-docker:1.0 . sleep 10 docker rmi -f 打完tag的镜像 sleep 10 docker tag 原镜像 sleep 10 echo 登录harbor docker login -u admin -p Harbor12345 Harbor机器IP:8085 sleep 10 docker push 本次被打完tag的镜像 echo 完成docker镜像推送 4.3.2 重新执行任务

保存上述配置,重新点击执行任务,等待构建完成即可

jenkins+docker集成harbor实现可持续集成的问题小结插图30

构建完成后,检查镜像,可以看到带有2.0标签的镜像就创建出来了

jenkins+docker集成harbor实现可持续集成的问题小结插图31

同时在Harbor控制台的public项目下,也能看到上面推送过来的docker镜像

jenkins+docker集成harbor实现可持续集成的问题小结插图32

4.4 其他机器获取harbor镜像

另有一台新机器,即上述的B机器,需要从harbor镜像仓库中拉取镜像到自己机器上面部署,该如何实现呢?

4.4.1 A、B机器添加授信

在harbor机器上面的docker配置文件中添加如下配置

jenkins+docker集成harbor实现可持续集成的问题小结插图33

保存后重新加载配置,并重启docker

systemctl daemon-reload systemctl restart docker

建议在A,B两台机器上均做此配置,避免后面出现其他的错误(后文会提到),简单来说,就是将各自的机器IP配置到 insecure-registries中即可。

4.4.2 删除并重新推送镜像

删除原有的镜像

docker rmi -f c9bc81de8fb3

jenkins+docker集成harbor实现可持续集成的问题小结插图34

最后通过jenkins任务或命令重新推送镜像

jenkins+docker集成harbor实现可持续集成的问题小结插图35

jenkins+docker集成harbor实现可持续集成的问题小结插图36

4.4.3 其他机器获取镜像

现在假设我们登录到了另一台机器,假设为B机器,即上述授信配置中的这台机器,使用docker命令登录harbor

docker login -u admin -p Harbor12345 Harbor部署机器:8085

如果出现下面的错误,表面在B机器的docker配置中,认为从上述的Harbor机器登录是不可信的

jenkins+docker集成harbor实现可持续集成的问题小结插图37

遇到这个问题时,需要将Harbor机器的docker配置,拷贝到B机器上来,按照上面同样的方式,修改一下这里的daemon.json配置文件,将Harbor机器的IP信息配置进去

jenkins+docker集成harbor实现可持续集成的问题小结插图38

最后加载B机器的docker配置,然后重启docker,再次使用Docker命令登录Harbor仓库,此时就登录进来了

jenkins+docker集成harbor实现可持续集成的问题小结插图39

4.4.4 拉取镜像

上一步登录成功后,就可以远程拉取Harbor镜像仓库中的镜像了

docker pull 前面最新打完tag的标签

jenkins+docker集成harbor实现可持续集成的问题小结插图40

拉取完成后,使用 docker images命令就能看到上面的那个镜像了,后续就可以使用docker命令直接启动镜像即可。

jenkins+docker集成harbor实现可持续集成的问题小结插图41

4.5 使用jenkins任务进行分发镜像

上面使用jenkins任务将构建完的镜像通过打标签,然后push到了Harbor仓库中,接下来需要将这些镜像分发到具体的业务服务器上,该怎么操作呢?参考下面的流程。

4.5.1 配置全局ssh凭证

找到ssh并安装

jenkins+docker集成harbor实现可持续集成的问题小结插图42

设置凭证,系统管理 —> 添加凭证—>添加域,自定义一个名称,这里意思是将使用当前的jenkins管理你的B机器

jenkins+docker集成harbor实现可持续集成的问题小结插图43

配置凭证

jenkins+docker集成harbor实现可持续集成的问题小结插图44

jenkins+docker集成harbor实现可持续集成的问题小结插图45

4.5.2 配置ssh连接信息

通过系统管理 -> 全局配置找到 SSH sites 配置的地方,填写下面的信息

jenkins+docker集成harbor实现可持续集成的问题小结插图46

配置之后是否可以连接呢?点击右边的 Check connection按钮,如果连接成功,说明配置没问题了,然后保存配置

jenkins+docker集成harbor实现可持续集成的问题小结插图47

4.5.3 配置测试任务

创建一个新的任务

jenkins+docker集成harbor实现可持续集成的问题小结插图48

进入任务的配置页面,在构建环境中,在Build Steps里,选择下面执行脚本的一项

jenkins+docker集成harbor实现可持续集成的问题小结插图49

选择之后,编写测试脚本

jenkins+docker集成harbor实现可持续集成的问题小结插图50

保存配置并执行任务,测试成功

jenkins+docker集成harbor实现可持续集成的问题小结插图51

编写脚本,将上述最新打标的镜像推送至B机器

echo 在B机器上面执行命令 echo 准备登录Harbor机器的仓库 docker login -u admin -p Harbor12345 Harbor机器IP:8085 echo 登录成功,开始拉取镜像 docker pull 最新tag的镜像 echo 拉取镜像成功

然后执行,等待镜像的拉取完成即可,如果后续还有其他命令要执行,可以继续再在上述的执行脚本中添加即可。

jenkins+docker集成harbor实现可持续集成的问题小结插图52

jenkins+docker集成harbor实现可持续集成的问题小结插图53

任务完成之后,登录B机器,检查镜像是否拉取成功,然后就可以基于当前的镜像进行后续的操作了。

jenkins+docker集成harbor实现可持续集成的问题小结插图54

五、镜像仓库备选方案

5.1 阿里云镜像仓库

上述关于镜像仓库的选择,我们使用的是Harbor作为解决方案进行说明,事实上,关于企业应用的镜像仓库,很多云厂商也提供了解决方案,像阿里云,如果你购买了阿里云的云服务器,可以直接免费使用阿里云提供的镜像仓库作为你的镜像托管中心,这个在另一篇文章中有详细的说明,可以参考:k8s部署springboot项目,网上的资料也比较多,这也是一种比较成熟的解决方案。

5.2 dockerhub

dockerhub是docker原生的镜像仓库,比如大家平时拉取某个技术组件镜像时,如果没有配置镜像源,将直接从dockerhub上拉取,如果想节省成本,也可以考虑直接将镜像推送至dockerhub仓库。

5.3 Nexus Repository Manager

Sonatype Nexus Repository Manager也是一个流行的仓库管理工具,支持Docker以及其他包管理器。它提供了企业级的安全性、可靠性和性能优化。

5.4 JFrog Artifactory

JFrog Artifactory是一款企业级的仓库管理工具,支持多种软件包格式,包括Docker镜像。它提供了高级的存储管理、权限控制和审计功能。

六、docker可视化管理工具

除了Harbor,你也可以选择其他的工具,这里列举下面几种常见的Docker镜像可视化管理工具:

Rancher

Rancher是一个开源的容器管理平台,提供了图形化界面来管理Docker容器和集群。它支持多云环境下的容器部署和管理。可以参考之前的一篇关于rancher的介绍:rancher使用详解

Shipyard

Shipyard是一个开源的Docker管理工具,提供了Web界面来管理Docker容器、镜像、网络等,还支持集群管理功能。

Portainer

Portainer是一款开源的轻量级Docker管理界面,提供直观的用户界面,可以方便地管理Docker容器、镜像、网络等。

Cockpit

Cockpit是一个基于Web的服务器管理工具,可以用于监控和管理Linux系统上的Docker容器和服务。

七、写在文末

本文通过较大的篇幅详细介绍了Harbor这款企业级docker管理工具的使用,并通过案例演示了如何在jenkins中配置任务集成Harbor,从而实现镜像的构建推送与分发,希望对看到的同学有用哦,本篇到此结束,感谢观看。


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容