Docker入门到实践 (十四) Docker企业级容器镜像仓库HarBor的搭建与配置

2023-10-28

文章目录


一、前言

  在上一篇文章中已经介绍了docker compose配置文件与常用命令, 下面正式进入到Docker企业级容器镜像仓库HarBor的搭建与配置的讲解。



二、企业级容器镜像仓库HarBor的介绍

  Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装。作为一个企业级私有docker镜像仓库,HarBor提供了更好的性能和安全,以提升用户使用仓库构建和运行环境传输镜像的效率,同时HarBor支持安装在多个仓库节点的镜像资源复制,镜像全部保存在私有仓库中, 确保数据和知识产权在公司内部网络中管控。此外,HarBor也提供了友好的Web UI界面和高级的安全特性,例如:用户和角色的管理、访问控制和活动审计等。




三、HarBor 特性

  • 基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project) 里有不同的权限

  • 镜像复制:镜像可以在多个Registry实例中复制 (同步)。尤其适合于负载均衡,高可用,混合云和多云的场景

  • 图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间

  • AD/LDAP 支持:Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理

  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理

  • 国际化:已拥有英文、中文、德文、日文和俄文的本地化版本,之后将会有更多的语言被添加进来

  • RESTful API:RESTful API 提供给管理员对于Harbor更多的操控,使得与其它管理软件集成变得更容易

  • 部署简单:提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式) 虚拟设备



四、HarBor 组件介绍

  • Proxy(代理服务器):Harbor组件,例如Register,UI和令牌服务都在代理服务后端,代理将来自客户端和浏览器的流量返回给后端各个服务

  • Register(仓库):负责存储Docker Images和处理docker pull/push命令。HarBor会强制对访问images进行控制,register会将客户端引导到令牌服务,以获取每次push和pull请求的有效令牌

  • Core services(核心服务):Harbor核心功能,主要提供以下服务

    • UI(图形用户界面):提供图形化界面,帮助用户管理registry上的镜像(image),并对用户进行授权

    • Token(令牌):负责根据用户的项目角色为每个Docker push/pull命令签发令牌。如果从Docker客户端发送的请求中没有令牌,注册中心会将请求重定向到Token令牌服务

    • Webhook:Webhook是在注册表中配置的一种机制,可以及时获取Registry仓库上image状态的变化情况。同时,HarBor使用Webhook来更新日志、启动复制以及其他一些功能

  • Database(数据库):为Core services(核心服务) 提供数据库服务,负责储存用户权限、审计日志和Docker image分组信息等数据

  • Job services(Job服务):提供Images镜像远程复制功能,可以将本地images同步到其他HarBor实例

  • Log collector(日志采集器):帮助监控Harbor运行,负责收集其他组件的日志



五、HarBor 与 Registry的区别

  Harbor 和 Registry都是Docker的镜像仓库,但相比较于Regisrty来说,HarBor具有很多的优点,其优点如下所示:

  • 提供分层传输机制,优化网络传输:Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象

  • 提供WEB界面,优化用户体验:只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像

  • 支持水平扩展集群:当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解

  • 良好的安全机制:企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。同时HarBor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制,kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制



六、HarBor的安装与配置


官方安装文档:https://github.com/goharbor/harbor/blob/release-1.7.0/docs/installation_guide.md

1、安装环境要求

1.1、硬件要求
资源 容量 描述
cpu 最少2 cpu 4 cpu最佳
内存 最少4 GB 8 GB最佳
磁盘 最少40 GB 160 GB最佳

1.2、软件要求
软件 版本要求 描述
Python 2.7或更高版本 请注意,您可能必须在默认未安装Python解释器的Linux发行版(Gentoo,Arch)上安装Python
Docker engine 1.10或更高版本 有关安装说明,请参阅:docker简介与安装
Docker Compose 1.6.0或更高版本 有关安装说明,请参阅:docker compose简介与安装
Openssl 最好是最新的 生成HarBor证书和密钥

1.3、网络端口
端口 协议 描述
443 HTTPS Harbor门户和核心API将在此端口上接受https协议的请求
4443 HTTPS 与Harbor的Docker Content Trust服务的连接,仅在启用Notary时才需要
80 HTTP Harbor门户和核心API将在此端口上接受HTTP协议的请求


2、安装HarBor

2.1、安装Docker 和 Docker Compose

Docker安装:https://blog.csdn.net/qq_39135287/article/details/101012149#CentOS7Docker_CE__59

Docker Compose安装:https://blog.csdn.net/qq_39135287/article/details/104060264#pythonpip_4

推荐使用python-pip方式安装Docker Compose,因为在安装过程中,会顺便将HarBor需要的Python 和 Openssl给安装上


2.2、下载HarBor离线安装包

  HarBor的下载地址:https://github.com/goharbor/harbor/releases
  HarBor安装分为在线安装和离线安装 (这里我选择下载离线安装包),其区别如下:

  • Online installer(在线安装):The installer downloads Harbor’s images from Docker hub. For this reason, the installer is very small in size. (安装程序从Docker hub下载Harbor的图像。因此,安装程序非常小。)

  • Offline installer(离线安装):Use this installer when the host does not have an Internet connection. The installer contains pre-built images so its size is larger. (当主机没有互联网连接时使用此安装程序。安装程序包含预构建的映像,因此其大小较大。)

如果觉得下载比较繁琐,我已经提供了HarBor安装包
链接:https://pan.baidu.com/s/1y3kBbkin_SG1PD-I6K1Dow
提取码:ofjx



2.2、将HarBor安装包上传到服务器

下载完成之后,打开WinSCP,把我们下载好的HarBor安装包,上传到Linux的 /usr/local/software 文件目录下 (注意:这里的software文件目录需要我们自行创建,创建software目录是方便我们管理安装的软件)


2.3、解压HarBor安装包
//1、进入到software目录下
cd /usr/local/software/

//2、解压HarBor安装包
tar xzf harbor-offline-installer-v1.9.4.tgz



2.4、编辑HarBor配置文件
//1、进入到harbor解压目录下
cd harbor/

//2、查看当前目录下的文件
ls

//3、编辑harbor.yml配置文件
vim harbor.yml



(1)、修改hostname属性 (提示:不要使用 localhost 或者 127.0.0.1,因为HarBor需要被外部客户端访问)

hostname: reg.mydomain.com
修改为
hostname: Linux服务器ip地址 或者 Linux服务器的域名



(2)、修改http端口,默认为80端口,为了避免与Nginx端口冲突,所以这里我修改为6278端口 (端口号的修改可以任意,只要不与其他端口号冲突即可)

http:
  port: 80
修改为
http:
  port: 6278



(3)、修改管理员(admin) 登录HarBor UI界面的密码,默认为账号为admin,密码为Harbor12345

harbor_admin_password: Harbor12345
修改为
harbor_admin_password: 123456



2.5、初始化配置文件并安装
//1、初始化配置文件
./prepare

//2、安装HarBor
./install.sh

//3、查看镜像运行状态
docke-compose ps

//常用命令
docker-compose up -d  //后台启动HarBor
docker-compose start  //启动HarBor
docker-compose restart //重启HarBor
docker-compose stop  //停止HarBor
docker-compose down  //停止HarBor并删除容器






2.6、访问HarBor

打开浏览器,访问HarBor,HarBor的访问地址为你在harbor.yml配置文件中设置的hostname:http端口 (这里我的为 http://192.168.198.145:6278)


2.7、登录HarBor

用户名为:admin,密码为harbor.yml配置文件中设置的harbor_admin_password



2.8、配置邮箱服务

1、选择配置管理 → 邮箱,进入到邮箱配置页面
在这里插入图片描述

2、修改相关配置 (以QQ邮箱为例),QQ授权码获取方式

邮件服务器: 由 smtp.mydomain.com 修改为 smtp.qq.com

邮件服务器端口: 默认为25,也可以修改为465

用户名: 你的qq邮箱

密码: 你的qq邮箱授权码

邮件来源: qq昵称<你的qq邮箱>

在这里插入图片描述

3、测试邮件服务器是否配置成功,点击"测试邮件服务器"按钮,如果出现"邮件服务器连通正常"提示,则表示邮箱配置成功


3、修改daemon.json配置文件

//1、进入到docker目录下
cd /etc/docker/

//2、编辑daemon.json配置文件
vim daemon.json

//3、添加HarBor仓库地址,该步骤用于让docker信任HarBor仓库地址,
{"insecure-registries": ["harbor.yml配置文件中设置的hostname:http端口"]} 


注意:"registry-mirrors"一行末尾有逗号,
在这里插入图片描述

4、重启docker服务

systemctl restart docker





七、HarBor仓库镜像的上传、拉取与删除

1、本地镜像上传到HarBor仓库

1.1、创建项目

HarBor仓库中默认会有一个"library"的项目,所有镜像都必须存放到项目下,这里我们自己新建一个"tomcat"项目,用于存放tomcat镜像

输入项目名称, 设置项目的访问级别,项目级别分为两种:公开和私有

  • 公开:表示拉取镜像时,不需要使用"docker login"命令登录到HarBor,即可拉取镜像,但是上传镜像时,需要使用"docker login"命令,才能上传镜像

  • 私有:表示拉取 和 上传镜像时,都需要使用"docker login"命令登录到HarBor,即可拉取 或 上传镜像

存储数量 和 存储容量可以根据自己情况来设置 (这里我选择默认配置),最后点击"确定"按钮,创建项目



1.2、上传镜像至HarBor仓库
//1、标记此镜像为HarBor仓库的镜像
docker tag 镜像ID/镜像名称[:版本号] harbor.yml配置文件中设置的hostname:http端口/项目名称/镜像名称[:版本号]

//2、登录HarBor仓库
docker login harbor.yml配置文件中设置的hostname:http端口
username: admin
Password: harbor.yml配置文件中设置的harbor_admin_password

//3、上传标记的镜像
docker push harbor.yml配置文件中设置的hostname:http端口/项目名称/镜像名称[:版本号]

以tomcat:8为例,测试镜像上传到HarBor仓库


查看镜像是否上传成功,可以看到tomcat项目的镜像仓库数 由0 变成 1


点击tomcat项目,可以查看该项目下的所有镜像

点击tomcat/tomcat镜像,可以查看该镜像的具体信息



2、拉取HarBor仓库的镜像到本地

//1、如果项目的访问级别为私有,则需要先登录到HarBor仓库 (访问级别为公开则可以跳过该步骤)
//私有项目如果不登录,则会报denied: requested access to the resource is denied 错误
docker login harbor.yml配置文件中设置的hostname:http端口
username: admin
Password: harbor.yml配置文件中设置的harbor_admin_password

//2、拉取镜像到本地
docker pull harbor.yml配置文件中设置的hostname:http端口/项目名称/镜像名称[:版本号]



3、HarBor仓库镜像的删除

勾选需要删除的镜像,点击"删除"按钮,在"删除镜像仓库确认"弹出框中,再次点击"删除"按钮,即可删除该镜像





Docker入门到实践系列文章列表:

Docker入门到实践 (一) docker简介与安装
Docker入门到实践 (二) docker常用命令讲解
Docker入门到实践 (三) Dockerfile解析与镜像制作
Docker入门到实践 (四) docker容器数据卷与数据卷容器
Docker入门到实践 (五) docker数据的备份、恢复与迁移
Docker入门到实践 (六) docker网络模式详解以及容器间的网络通信
Docker入门到实践 (七) docker常用软件的安装
Docker入门到实践 (八) 本地镜像推送到阿里云 和 下载镜像到本地
Docker入门到实践 (九) docker可视化界面portainer的安装与使用
Docker入门到实践 (十) IDEA集成Docker构建容器镜像,部署项目
Docker入门到实践 (十一) docker私有仓库的搭建与配置
Docker入门到实践 (十二) docker compose简介与安装
Docker入门到实践 (十三) docker compose配置文件与常用命令讲解
Docker入门到实践 (十四) docker企业级容器镜像仓库HarBor的搭建与配置




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker入门到实践 (十四) Docker企业级容器镜像仓库HarBor的搭建与配置 的相关文章

  • C#中字符串判断EndsWith和Contains的效率比较

    关于字符串的判断 EndsWith和Contains下面做了两个简单的例子 运行后测试了一下所耗时间 public void TestContains DateTime starTime DateTime Now string str 20
  • Pip install 和Conda install 的区别和使用场景

    文章目录 一 Conda 和Pip的区别 总结 二 Pip install和Conda install的区别 1 默认安装路径不同 1 python包 2 非python包 相关问题 解决 2 conda list列表数量 gt pip l
  • mysql中替换字段的部分内容

    如果想替换表中所有记录的某一个字段的指定字符串内容 可以使用mysql提供的replace 函数来实现 表记录如下 我想将address字段的湖北这部分内容替换成拼音hubei 那么sql语句如下 update user set addre
  • ConvTranspose2d(反卷积操作)

    nn ConvTranspose2d 反卷积操作 1 公式 class torch nn ConvTranspose2d in channels out channels kernel size stride 1 padding 0 out
  • Python 教程

    一 Python环境下载 百度网盘链接 https pan baidu com s 12MnzyIZZuKBiveebPdtJ3w 提取码 0st4 二 Python安装步骤 1 点击python 3 8 1 amd64 exe 2 选择安
  • Python中模块、包、库、框架的理解

    一 模块 module 以 py 文件开头的都叫做模块 模块中有定义的变量 函数 类 模块的名称为 py文件的名称 作为全局变量 name 的值 如果是模块A自己py A py则 name main 如果是被其他模块import之后使用的话
  • 机器学习实战之决策树最有特征的选取

    在学习了jack cui机器学习博客后 为了给自己留下一个理解的笔记 本人比较笨 以后方便查看 他的博客地址在下方 写得很好 点击打开链接 决策树机器学习的一种分类方法 拿相亲来说 决策树模型就是上面这一个 长方形为这个人的某个特征 决策树
  • sql把逗号分割的字符串转换为可放入in的条件语句的字符数列

    mysql 不能直接使用in子句 会当做一个字符来处理 使用FIND IN SET 字段 变量 orcal在in子句中加入 SELECT REGEXP SUBSTR 变量 1 LEVEL FROM DUAL CONNECT BY REGEX
  • element-ui的分页如何实现

    element ui的分页如何实现 表格需要绑定的属性
  • mysql 中enum用法

    enum最大长度65535 也就是可以存65535个预定义值 enum底层存的是十进制整数 严格按顺序1 2 3 4 5 排列 固千万不要用enum来存数字 用例 一件商品从付款到收货的流程的5个流程 未付款 已付款 已发货 已送达 已收货
  • Prometheus(三)Grafana部署及部署告警

    文章目录 一 Grafana部署及模板展示 1 Grafan部署步骤 二 打标签 1 重新打标定义 在job上定义 2 relabel config 重新打标配置 三 prometheus告警功能 1 告警功能概述 2 告警规则 3 通知告
  • 定时器使用总结

    gd32定时器使用总结 本次项目中较多模块使用了定时器 对定时器的不同使用方法进行总结补充 模块一 回充红外 通过定时器的计数器模块记录红外发射出来的脉冲宽度 void ir timer init uint16 t prescaler ui
  • 数据仓库与数据挖掘课后思考题整理

    数据仓库与数据挖掘课后思考题整理 文章目录 数据仓库与数据挖掘课后思考题整理 1 数据仓库概述 思考题 2 数据仓库及其设计 思考题 实践题 3 OLAP技术 思考题 课后书面作业 4 数据挖掘概述 思考题 5 关联分析 思考题 实践题 7
  • mysql:Error executing row event: ‘Table ‘hk_db.jf_share_task_item‘ doesn‘t exist‘

    场景 在主从同步的时候报错 这种情况 1 确实这个表不存在 2 在hk db这个库的目录下 缺失了这张表的 frm文件 或者 idb文件 cd xx hk db ll grep jf share task item rw r 1 mysql
  • YOLO(You Only Look Once)算法详解+NMS算法

    https blog csdn net u014380165 article details 72616238 NMS算法 https blog csdn net shuzfan article details 52711706
  • USB_HID协议基础

    目录 一 HID类设备相关概念 1 USB HID名词解释 2 HID类设备数据传输特性
  • 深度学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)

    作者丨ycszen 来源 https zhuanlan zhihu com p 22252270 编辑丨极市平台 导读 本文仅对一些常见的优化方法进行直观介绍和简单的比较 前言 本文仅对一些常见的优化方法进行直观介绍和简单的比较 各种优化方
  • SpringBoot 自动配置原理详解

    自动配置类原理 一些公用或通用性的类或第三方的配置类 不需要每个项目都重复的编写 将他们抽取成自动配置类 使用的时候只需要引入即可 代码实现 public class A14 public static void main String a

随机推荐

  • 计算机三四级网络技术,全国计算机等级考试四级网络技术论述题真题3

    1 2003年 网络安全策略设计的重要内容之一是 确定当网络安全受到威胁时应采取的应急措施 当我们发现网络受到非法侵入与攻击时 所能采取的行动方案基本上有两种 保护方式与跟踪方式 请根据你对网络安全方面知识的了解 讨论以下几个问题 1 当网
  • table完成动态表头与动态数据

  • 【设计模式】一、设计模式七大原则

    文章目录 设计模式概述 设计模式七大原则 设计模式的目的 设计模式七大原则 1 单一职责原则 2 接口隔离原则 3 依赖倒转 倒置 原则 4 里氏替换原则 5 开闭原则 Open Closed Principle简称OCP原则 6 迪米特法
  • VSCode Error:Unable to parse decrypted password 解决方案

    最近在折腾插件安装的时候 遇到了一些比较奇怪的问题 记录一下 VSCode安装了CodeGeeX插件并登录成功 后面因为一些原因禁用了该插件 刚好VSCode又发了个版本升级 可能一系列巧合导致后来启用CodeGeeX插件后插件变得不可用
  • 后台管理系统开发流程

    首先我们是从0开始开发的 那么就要从脚手架开始 这个后台管理系统的项目使用的是Vue脚手架3 0 安装好脚手架之后 我们就可以对项目进行封装模块 配置多环境变量 方便后期维护和修改 下载Vuex node sass axios elemen
  • 清理windows10自带的xbox等应用的脚本

    最近在系统封装中发现即使在母盘中删除了windows10自带的xbox等应用 再次重装之后仍然还是会有 通过Dism 对镜像分析未发现有相关的可删减的模块 遂采用PowerShell脚本去解决 Set ExecutionPolicy rem
  • CocosCreator环境搭建生成android应用apk cocos2d android NDK win10系统

    有问题找我 100 次 苹果mac系统下cocos2d android和ios含NDK开发环境搭建 安装说明20161129 点这里 一 工具 不能用中文路径或放在中文路径下 操作系统 win10专业版 1 android NDK andr
  • MySQL中SQL语句——DQL(数据查询语句)

    前言 首先对于数据库有一定的了解 会对于Mysql的学习有一定的帮助 数据库主要分为 DB 数据库 DBMS 数据库管理系统 SQL 结构化查询语言 用于和DBMS通信的语言 这篇要讲的DQL 数据查询语句 是属于SQL语言中的一种语言 因
  • 宋浩概率论与数理统计-第二章-笔记

    概率论与数理统计 第二章 2 1 随机变量的概念 2 2 1 离散型随机变量及其概率分布 连续型随机变量及其概率密度函数 2 2 2 分布函数的定义 离散型的分布函数 例题 连续型的分布函数 例题 2 2 3 常见的分布 离散型常见分布 0
  • React滚动条优化-滚动条滚动到最底部

    当消息较多出现滚动条时 有后续新消息的话总将滚动条滚动到最底部 声明一个 ref 并设置到聊天列表的容器元素上 用于操作聊天列表元素的引用 const chatListRef useRef null div 通过 useEffect 监听聊
  • C# Image和字节流的互化

    using System using System Collections Generic using System Linq using System Text using System Drawing using System IO n
  • 《当程序员的那些狗日日子》六

    当程序员的那些狗日日子 五十一 太不给力的年终奖 2009年12月中旬 敖总请研发部各人去台湾六天游 这是敖总每年一次的对研发部同仁的特别恩惠 此外此次台湾游敖总还请了负责技术支持的另外三位同事一同前往 由于办证及其他原因 最后只有立经理
  • Tips系列之飞书云文档

    飞书云文档可谓是飞书套件中深受用户喜爱的功能之一 今天就给大家呈上几个小Tips 让你深入了解飞书云文档 1 新建在线文档 表格和文件夹 电脑桌面端 方式 1 点击飞书桌面端左侧的云文档按钮 登录云文档首页 点击云文档首页右上角新建按钮 选
  • Qtimer使用多次connect的误区

    本人目前小白一枚 所及问题只为方便查看 忘大神们勿喷 有指导意见的本人会很高兴 在使用一个定时器时多次调用start 和stop 时完全没有问题的 先讲一下是start 的作用 Qt的帮助文档如下 This is an overloaded
  • 直接修改gba_修改GBA游戏本身

    满意答案 vhewq 2013 07 14 采纳率 42 等级 11 已帮助 7209人 如何Hack GBA ROM 作者 zhaosili zZ 转载请注明 本文假定你已经了解80x86汇编 尽管指令集不同 并且会使用TRW2000 尽
  • 蓝桥杯练习系统题解目录

    蓝桥杯历年省赛试题汇总及试题详解 https blog csdn net weixin 42069140 article details 88910340 蓝桥杯历年决赛试题汇总及试题详解 https blog csdn net weixi
  • 原生JS实现视频上传

    原生JS实现视频上传可以通过以下步骤实现 在HTML中添加一个文件输入框和一个提交按钮
  • 从CMOS到触发器(二)

    1 双稳态器件 双稳态器件是指稳定状态有两种 一种是0 一种是1的器件 双稳态器件是存储器件的基本模块 双稳器件的的一种电路结构是 交叉耦合反相器 结构 如下图所示 连个反相器连在一起 这就构成了一个双稳态器件 为什么是双稳态呢 我们现在就
  • Qt 一个信号连接多个槽函数后的执行顺序

    当我们想一个信号触发多个槽函数的时候 又对执行顺序有要求 要么要知道这些槽函数的执行顺序 Qt5后 在信号发射后 槽函数会按照链接顺序执行 下面写个简单的例子来验证一下 环境 win10 Qt 5 13 0 QPushButton btn1
  • Docker入门到实践 (十四) Docker企业级容器镜像仓库HarBor的搭建与配置

    文章目录 一 前言 二 企业级容器镜像仓库HarBor的介绍 三 HarBor 特性 四 HarBor 组件介绍 五 HarBor 与 Registry的区别 六 HarBor的安装与配置 1 安装环境要求 1 1 硬件要求 1 2 软件要