自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录

  • 前言
  • 一、Harbor的安装
    • 第一步:安装docker
    • 第二步:安装docker-compose
    • 第三步:安装Harbor
  • 二、Harbor登录
  • 三、Harbor项目管理
    • 第一步:创建项目
    • 第二步:推送镜像
  • 四、Harbor权限控制
  • 五、Harbor自动清理多余的镜像
    • 手动清理
    • 自动清理
  • 总结


前言

我们在使用docker时,镜像下载会默认到dockerHub上去下载。我们也可以将自己的应用发布到dockerHub上,但是dockerHub上都是公有镜像,任何人都可以下载。dockerHub上普通用户只能创建一个私有项目,创建多个是需要付费的。如果我们的项目需要私有化,那么使用Harbor可以来完成,而且Harbor是开源免费的。

关于如何将自己的项目打包成docker镜像并上传到dockerHub,可以参照我的文章【maven插件docker-maven-plugin打包镜像并发布到dockerHub】

下面来介绍Harbor的安装和基本的操作使用。


一、Harbor的安装

首先,的运行要依赖docker和docker-compose。如果已安装这两个组件可以直接到第三步

第一步:安装docker

这里为了方便我整理一个脚本,内容如下:

Centos/Redhat/Oracle系列脚本:

#!/bin/sh
echo '删除系统自带docker'
yum remove -y docker \docker-client \docker-client-latest \docker-ce-cli \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engineecho '安装docker依赖'
yum install -y yum-utils device-mapper-persistent-data lvm2echo '配置阿里云docker源'
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoecho '安装最新docker'
yum install -y docker-ceecho 'docker开机启动'
systemctl enable dockerecho '启动docker'
systemctl start dockerecho 'docker国内源替换(可选)'
echo -e '{"registry-mirrors": ["https://dockerhub.azk8s.cn","https://reg-mirror.qiniu.com","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"]}' > /etc/docker/daemon.jsonecho '重新加载docker配置文件'
systemctl daemon-reloadecho '重启docker'
systemctl restart docker

Ubuntu/Debian系列安装脚本:

#!/bin/sh
echo '删除系统自带docker'
sudo apt-get remove -y docker \docker-client \docker-client-latest \docker-ce-cli \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine
echo '更新 apt-get'
sudo apt-get updateecho '安装docker依赖'
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common -yecho '添加key'
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -echo '添加库下载地址'
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"echo '安装最新docker'
sudo apt-get install docker.io -yecho 'docker开机启动'
sudo systemctl enable dockerecho '启动docker'
sudo systemctl start dockerecho 'docker国内源替换(可选)'
sudo echo -e '{"registry-mirrors": ["https://dockerhub.azk8s.cn","https://reg-mirror.qiniu.com","https://registry.docker-cn.com"],"exec-opts": ["native.cgroupdriver=systemd"]}' > /etc/docker/daemon.jsonecho '重新加载docker配置文件'
sudo systemctl daemon-reloadecho '重启docker'
sudo systemctl restart docker

第二步:安装docker-compose

sudo curl -# -L "https://github.com/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

第三步:安装Harbor

Harbor官网地址点击这里,查看releases列表,我们选择最新的:v2.10.0 Latest
在这里插入图片描述
这里有离线版本和在线版本,如果你服务器网络不错可以选择在线版本,这里我们选择离线版本。

快捷下载地址:

离线版本

在线版本

下载完成后并上传到服务器。

解压:

tar -xzvf harbor-offline-installer-v2.10.0.tgz

设置安装目录,这里我们安装到/usr/local目录下

mv harbor /usr/local/

进入目录:

cd /usr/local/harbor/

查看文件:

 ls
common.sh  harbor.v2.10.0.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

复制配置文件:

cp harbor.yml.tmpl harbor.yml

修改配置文件:

vim harbor.yml
  1. 修改hostname。这里我们改成IP:hostname: 192.168.101.170
  2. 修改http.端口,这里我们改成2280。http.port: 2280
  3. 注释掉HTTPS的配置,如果要使用,可以使用另外的NGINX来替代。
  4. 修改管理员密码,默认值:harbor_admin_password: Harbor12345
  5. 修改docker挂载目录,这里根据需要来修改。data_volume: /harbordata

然后运行prepare:

./prepare

运行完毕后执行安装:

./install.sh

如果有如下信息输出表示安装成功并启动:

[+] Running 9/10⠼ Network harbor_harbor        Created                                                                                                                                                                         3.5s ✔ Container harbor-log         Started                                                                                                                                                                         0.7s ✔ Container redis              Started                                                                                                                                                                         1.2s ✔ Container harbor-db          Started                                                                                                                                                                         1.4s ✔ Container registryctl        Started                                                                                                                                                                         1.5s ✔ Container harbor-portal      Started                                                                                                                                                                         1.3s ✔ Container registry           Started                                                                                                                                                                         1.5s ✔ Container harbor-core        Started                                                                                                                                                                         2.6s ✔ Container nginx              Started                                                                                                                                                                         3.1s ✔ Container harbor-jobservice  Started                                                                                                                                                                         3.0s 
✔ ----Harbor has been installed and started successfully.----

使用docker检查:

docker ps

在这里插入图片描述

二、Harbor登录

安装成功后,我们便可以访问,上面我们监听的端口是2280,所以使用http://ip:2280直接访问:
在这里插入图片描述
默认管理员:admin
默认密码(harbor_admin_password配置):Harbor12345

登录后可以进行一些偏好设置,如修改主题,修改密码等操作:
在这里插入图片描述

三、Harbor项目管理

Harbor以项目为单位来管理镜像,一个项目可以包含多个镜像,下面我们来演示创建一个项目并推送镜像

第一步:创建项目

我们创建一个libs的项目,我们可以把一些常用的固定版本的公共镜像放进去,方便我们使用。
在这里插入图片描述

这个项目默认是私有的,点击项目可以查看操作详情:
在这里插入图片描述

第二步:推送镜像

  1. 这里我们找一个redis的镜像推送到我们的私有库。
docker pull redis:5.0.7
  1. 然后根据下面的命令进行重新命名:
docker tag SOURCE_IMAGE[:TAG] 8.137.81.52:2280/libs/REPOSITORY[:TAG]

SOURCE_IMAGE[:TAG] 表示源镜像
REPOSITORY[:TAG] 表示推送后的镜像
我们使用如下命令:

docker tag redis:5.0.7 8.137.81.52:2280/libs/myredis:5.0.7
  1. 登录harbor
docker login http://8.137.81.52:2280

输入用户名admin和密码,发现会报错误:

Error response from daemon: Get "https://8.137.81.52:2280/v2/": http: server gave HTTP response to HTTPS client

意思是本来是http的协议,结果客户端需要时HTTPS的返回。如果要添加docker登录HTTP协议,需要修改docker配置:

vim /etc/docker/daemon.json

在配置中加入:

"insecure-registries": ["http://8.137.81.52:2280"]

重启docker生效:

systemctl daemon-reload && systemctl restart docker

然后在登录,运行结果如下:

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

登录成功

  1. 推送到Harbor仓库
docker push 8.137.81.52:2280/libs/myredis:5.0.7

查看结果:
在这里插入图片描述
说明已经成功推送到harbor了

四、Harbor权限控制

在上面的示例中,我们使用admin,我们可以专门来创建一些用户来进行不同的管理
在这里插入图片描述

这里我们创建一个test用户

然后回到项目点击项目详情:
在这里插入图片描述

点击添加用户
在这里插入图片描述

选择不同的角色

  • 项目管理员 项目的最高权限,拥有项目的一切操作
  • 维护人员 扫描镜像、查看复制作业以及删除镜像的能力
  • 开发者 拥有项目的读写权限
  • 访客 只读权限。可以拉取和重新标记镜像,但不能推送。
  • 受限访客 不完全读取权限。可以拉取镜像但不能推送,看不到日志或项目的其他成员。

上面我们创建一个test用户,并设置为受限访客,下面我们来测试这个用户的使用。

回到我们自己的电脑,然后再登录docker

我们先不登录,直接拉取镜像:

docker pull 8.137.81.52:2280/libs/myredis:5.0.7

这样会返回如下错误:

Error response from daemon: unauthorized: unauthorized to access repository: libs/myredis, action: pull: unauthorized to access repository: libs/myredis, action: pull

说明需要登录才能拉取我们的镜像

下面我们使用test用户登录

docker login http://8.137.81.52:2280

如果还是报Error response from daemon: Get “https://8.137.81.52:2280/v2/”:的错误,请修改我们本地的docker配置
这时我们要输入test用户:
在这里插入图片描述
然后我们pull刚才的镜像:

docker pull 8.137.81.52:2280/libs/myredis:5.0.7

结果:
在这里插入图片描述
拉取成功

五、Harbor自动清理多余的镜像

我们在平常的开发中,可能会生成很多版本的镜像,如果是Java程序每个镜像一般都是几百M,需要的硬盘资源很大,特别是在开发环境下,版本迭代非常快,时间久了,一些很早的版本就完全没用了,直接清理掉以释放硬盘资源。

手动清理

这种方式需要人工“智能”,手动去筛选需要清理的无用镜像,操作如下所示:
在这里插入图片描述

自动清理

在项目中使用策略来控制
在这里插入图片描述
添加规则:
在这里插入图片描述

上面我们只保留最近推送的5个版本的镜像,还可以进行匹配操作,大家可以根据自身情况进行配置。
在这里插入图片描述
添加定时任务来执行,这样就可以保证会自动清理掉那些不需要的镜像文件。


总结

Harbor作为docker私有镜像库来使用还是不错的,而且运行时内存和CPU的占用都还能过得去,当然也还可以对Harbor的组件进行优化处理,比如使用外部的数据库和Redis,这样还能减少资源的占用,大家可以自行研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA高端项目:FPGA基于GS2971的SDI视频接收+图像缩放,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用FPGA的SDI…

Python实现向量自回归移动平均模型(VARMA算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 向量自回归移动平均模型(Vector Autoregressive Moving Average, VARMA)是一种…

《商用密码应用安全性评估管理办法》解读

根据《中华人民共和国密码法》(以下简称《密码法》)、《商用密码管理条例》(以下简称《条例》)等法律法规,国家密码管理局研究制定了《商用密码应用安全性评估管理办法》(国家密码管理局令第3号&#xff09…

基于springboot实现旅游路线规划系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游路线规划系统演示 摘要 随着互联网的飞速发展以及旅游产业的逐渐升温,越来越多人通过互联网获取更多的旅游信息,包括参考旅游文纪等内容。通过参考旅游博主推荐的旅游景点和规划线路,参考计划着自己的旅行&#xff0c…

Ubuntu整系统迁移到另一个硬盘中

以ubuntu20.04为例,之前使用的是1T的移动硬盘,每次进入后性能不太稳定,所以最近买了块1T的固态硬盘给我的笔记本装上了,但是如果重新进行各种软件安装及环境配置就太麻烦了,所以采用了系统迁移 1.首先制作一个Ubuntu系…

08、关于语法:resp?.data?.data 的含义与实际操作中可能遇到的问题

1、数据情况: 其一、从后端拿到的数据为: let resp.data {"data": [],"lag_mode": 3,"totol": 0 }或: let resp.data {"data": [],"totol": 0 }其二、目标数据为: // 想要…

Git保姆级使用教程

一、版本控制 1.1 团队开发问题 企业项目一般以团队形式实施开发,那团队开发中会出现哪些问题呢? 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之…

数据库常见理论常见面试题(总结)

一、前言 这里呢,博主会介绍一些平时关于数据库的理论的问题,比如数据库的三级模式两级映射、触发器、范式、存储过程、视图等等概念知识,但是像索引、事务、锁等内容,之前的文章就讲解过了,这里就不作过多的介绍了&am…

android工程师面试题目,安卓开发面试宝典

一、前言 不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。 如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。 最近看到很多An…

Delegate动画案例(P30 5.6delegate动画)

一、ListElement,ListModel,ListView 1. ListElement ListElement 是 QML 中用于定义列表项的元素。它可以包含多个属性,每个属性对应列表项中的一个数据字段。通过在 ListModel 中使用 ListElement,可以定义一个列表的数据模型…

【leetcode】链表分割

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 方法1. 不用哨兵位方法2. 用哨兵位 点击查看题目 思路: 将链表分为2个链表list1和list2,…

物联网边缘计算云边协同

文章目录 一、物联网云边协同1.IoT云边协同设计2.物联网平台设计3.物联网平台实现 二、部署环境1.节点配置2.版本信息 三、IoT云边协同部署1.部署Kubernetes集群2.部署KubeEdge3.部署ThingsBoard集群4.部署Node-RED边缘网关4.1.边缘网关功能4.2.部署EMQX4.2.部署Node-RED 5.配置…

(正规api接口代发布权限)短视频账号矩阵系统实现开发--技术全自动化saas营销链路生态

短视频账号矩阵系统实现开发--技术全自动化saas营销链路生态源头开发(本篇禁止抄袭复刻) 一、短视频矩阵系统开发者架构 云罗短视频矩阵系统saas化系统,开发层将在CAP原则基础上使用分布式架构,对此网站的整体架构采用了基于B/S三层架构模式…

Django Web架构:全面掌握Django模型字段(下)

Django Web架构 全面掌握Django模型字段(下) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article…

协议和序列化反序列化

“协议”和序列化反序列化 “协议”的概念: “协议”本身是一种约定俗成的东西,由通讯双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容 我们把这个规矩叫做“…

机器学习|决策树

左图的点是一种线性不可分的情况,无法拿一条直线去将进行分开。 每一个节点都代表一个决策,从而导致节点的分流。 最终的目标肯定是要达到分类。 但取得目标的过程是有所谓的好坏。 而这个好坏用熵/信息增益来衡量。 熵是一种用于反映系统混乱程度的物理…

思科网络设备监控

思科是 IT 行业的先驱之一,提供从交换机到刀片服务器的各种设备,以满足中小企业和企业的各种 IT 管理需求。管理充满思科的 IT 车间涉及许多管理挑战,例如监控可用性和性能、管理配置更改、存档防火墙日志、排除带宽问题等等,这需…

Makefile从入门到项目编译实战(学习笔记)

1.make和makefile介绍 1. make make 是一个应用程序,位于 /usr/bin/make 目录下,make 有如下的功能: (1)解析源程序之间的依赖关系 (2)根据依赖关系自动维护编译工作 (3&#xff09…

Jmeter插件PerfMon Metrics Collector安装使用及报错解决

Jmeter作为一个轻量级的性能测试工具,开源、小巧、灵活的特性使其越来越受到测试人员喜爱。在实际的项目中,特别是跨地区项目,排除合作方指定要求使用Loadrunner作为性能测试工具外,Jmeter会是首选。 本篇文章,就着重…

【MATLAB源码-第149期】基于MATLAB的2ASK,2FSK,2PSK,2DPSK等相干解调仿真,输出各节点波形。

操作环境: MATLAB 2022a 1、算法描述 2ASK(二进制幅移键控)、2FSK(二进制频移键控)、2PSK(二进制相移键控)和2DPSK(二进制差分相移键控)是数字调制技术中的基本调制方…