当前位置:网站首页>【云原生】DevOps(五):集成Harbor
【云原生】DevOps(五):集成Harbor
2022-07-31 04:41:00 【是Dream呀】
本文目录:
前言:
当下云原生火爆全网,云原生充分利用了云计算弹性、敏捷、资源池和服务化特性,改变云端应用的设计、开发、部署和运行模式,为我们大大提供了便利,本篇文章将带大家走进云原生的世界,揭开它的神秘面纱。
入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!
最后,愿我们都能在看不到的地方闪闪发光,一起加油进步
一、Harbor介绍
前面在部署项目时,我们主要采用Jenkins推送jar包到指定服务器,再通过脚本命令让目标服务器对当前jar进行部署,这种方式在项目较多时,每个目标服务器都需要将jar包制作成自定义镜像再通过docker进行启动,重复操作比较多,会降低项目部署时间。
我们可以通过Harbor作为私有的Docker镜像仓库。让Jenkins统一将项目打包并制作成Docker镜像发布到Harbor仓库中,只需要通知目标服务,让目标服务统一去Harbor仓库上拉取镜像并在本地部署即可。
Docker官方提供了Registry镜像仓库,但是Registry的功能相对简陋。Harbor是VMware公司提供的一款镜像仓库,提供了权限控制、分布式发布、强大的安全扫描与审查机制等功能
二、 Harbor安装
这里采用原生的方式安装Harbor。
下载Harbor安装包:https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz
拖拽到Linux并解压:
tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/
修改Harbor配置文件:
首先复制一份harbor.yml配置
cp harbor.yml.tmpl harbor.yml
编辑harbor.yml配置文件
配置Harbor文件
启动Harbor
./install.sh
查看日志 登录Harbor
登录Harbor 首页信息
首页信息
三、 Harbor使用方式
Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor上,以及从Harbor上下载指定镜像
在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。
1. 添加用户构建项目
创建用户
创建用户 构建项目(设置为私有)
构建项目 给项目追加用户
追加用户管理 切换测试用户
切换测试用户
2. 发布镜像到Harbor
修改镜像名称
名称要求:harbor地址/项目名/镜像名:版本
修改镜像名称 修改daemon.json,支持Docker仓库,并重启Docker
修改daemon.json,支持Docker仓库 设置登录仓库信息
docker login -u 用户名 -p 密码 Harbor地址
推送镜像到Harbor
推送镜像到Harbor |
3. 从Harbor拉取镜像ls
跟传统方式一样,不过需要先配置/etc/docker/daemon.json文件
{
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.11.11:80"]
}
拉取镜像 |
---|
4. Jenkins容器使用宿主机Docker
构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可。
设置Jenkins容器使用宿主机Docker
设置宿主机docker.sock权限:
sudo chown root:root /var/run/docker.sock sudo chmod o+rw /var/run/docker.sock
添加数据卷
version: "3.1" services: jenkins: image: jenkins/jenkins container_name: jenkins ports: - 8080:8080 - 50000:50000 volumes: - ./data/:/var/jenkins_home/ - /usr/bin/docker:/usr/bin/docker - /var/run/docker.sock:/var/run/docker.sock - /etc/docker/daemon.json:/etc/docker/daemon.json
5. 添加构建操作
制作自定义镜像 |
---|
![]() |
6. 编写部署脚本
部署项目需要通过Publish Over SSH插件,让目标服务器执行命令。为了方便一次性实现拉取镜像和启动的命令,推荐采用脚本文件的方式。
添加脚本文件到目标服务器,再通过Publish Over SSH插件让目标服务器执行脚本即可。
编写脚本文件,添加到目标服务器
harbor_url=$1 harbor_project_name=$2 project_name=$3 tag=$4 port=$5 imageName=$harbor_url/$harbor_project_name/$project_name:$tag containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'` if [ "$containerId" != "" ] ; then docker stop $containerId docker rm $containerId echo "Delete Container Success" fi imageId=`docker images | grep ${project_name} | awk '{print $3}'` if [ "$imageId" != "" ] ; then docker rmi -f $imageId echo "Delete Image Success" fi docker login -u DevOps -p [email protected] $harbor_url docker pull $imageName docker run -d -p $port:$port --name $project_name $imageName echo "Start Container Success" echo $project_name
并设置权限为可执行
chmod a+x deploy.sh
如图
7. 配置构建后操作
执行脚本文件 |
---|
![]() |
【系列好文推荐】
Python Web开发一:Web开发简介
Python Web开发二:Django的安装和运行
Python Web开发(三):HTTP请求的url路由
欢迎订阅本专栏:零基础学Python 系列课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~
好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
如果你喜欢的话,就不要吝惜你的一键三连了~
️️ ️ 商务合作|交流学习|粉丝福利|Python全套资料️ ️ ️ 欢迎联系~
边栏推荐
- 高斯分布及其极大似然估计
- idea工程明明有依赖但是文件就是显示没有,Cannot resolve symbol ‘XXX‘
- 已解决(最新版selenium框架元素定位报错)NameError: name ‘By‘ is not defined
- C language confession code?
- pom文件成橘红色未加载的解决方案
- el-image tag doesn't work after binding click event
- PWN ROP
- C# 实现PLC的定时器
- Redis uses LIST to cache the latest comments
- MATLAB/Simulink&&STM32CubeMX工具链完成基于模型的设计开发(MBD)(三)
猜你喜欢
MySQL数据库安装配置保姆级教程(以8.0.29为例)有手就行
Vue项目通过node连接MySQL数据库并实现增删改查操作
C语言从入门到如土——数据的存储
type_traits metaprogramming library learning
"DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction" paper notes
开源汇智创未来 | 2022开放原子全球开源峰会OpenAtom openEuler分论坛圆满召开
递归实现汉诺塔问题
Two address pools r2 are responsible for managing the address pool r1 is responsible for managing dhcp relays
Exsl file preview, word file preview web page method
高等数学---第九章二重积分
随机推荐
MySQL修改root账号密码
errno error code and meaning (Chinese)
The use of beforeDestroy and destroyed
el-image标签绑定点击事件后没有有用
RESTful api interface design specification
No qualifying bean of type question
慧通编程第4关 - 魔法学院第6课
开源社区三十年 | 2022开放原子全球开源峰会开源社区三十年专题活动圆满召开
行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
C语言从入门到如土——数据的存储
Vue项目通过node连接MySQL数据库并实现增删改查操作
[CV project debugging] CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT problem
两个地址池r2负责管地址池r1负责管dhcp中继
Why don't you programmers make a living off your own projects?And have to work for someone else?
npm、nrm两种方式查看源和切换镜像
扫雷小游戏——C语言
Unity2D 自定义Scriptable Tiles的理解与使用(四)——开始着手构建一个基于Tile类的自定义tile(下)
Safety 20220718
type_traits metaprogramming library learning
[Paper reading] Mastering the game of Go with deep neural networks and tree search