当前位置: 首页 > news >正文

Docker--harbor私有仓库部署与管理

目录

一、构建私有库

1.下载 registry 镜像

2.在 daemon.json 文件中添加私有镜像仓库地址

3.运行 registry 容器

4.为镜像打标签

5.上传到私有仓库

6.列出私有仓库的所有镜像

7.列出私有仓库的centos镜像有哪些tag

8.测试私有仓库下载

二、Harbor 简介

1.什么是Harbor?

2.Harbor 的特性

3. Harbor 的构成

3.1Proxy

3.2Registry

3.3Core services

3.4Database(harbor-db)

3.5Job services

3.6Log collector(harbor-log)

三、部署 Harbor

 1.部署 Docker-Compose 服务

2.部署 Harbor 服务

2.1下载或上传 Harbor 安装程序

2.2修改harbor安装的配置文件

3.启动 Harbor

4.查看 Harbor 启动镜像

5.创建一个新项目

三、维护管理 Harbor

1.通过 Harbor Web 创建项目

2.创建 Harbor 用户

2.1创建用户并分配权限

2.2添加项目成员

2.3在客户端上使用普通账户操作镜像

四、实现 Harbor 高可用

1.在192.168.88.10上部署 Harbor

2.构建 Harbor 高可用


一、构建私有库

基于registry镜像创建的私有仓库,存在几点问题:

  • 查看镜像不方便
  • 私有仓库没有加密,安全性较差

1.下载 registry 镜像

docker pull registrydocker images

2.在 daemon.json 文件中添加私有镜像仓库地址

vim /etc/docker/daemon.json{#指定本机的私有镜像地址,注意用逗号结尾。"insecure-registries": ["http://192.168.88.10:5000"],"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}systemctl restart docker

3.运行 registry 容器

docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latestdocker ps -a-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:指定宿主机的目录绑定容器中的目录,实现数据持久化
-p:指定端口映射,将宿主机的5000端口就访问到registry容器的服务
--restart=always:重启策略。在容器退出时重启容器。
--name registry:创建容器命名为registryDocker 容器重启策略:
no:默认策略。在容器退出时不重启容器。
on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
on-failure:3 :在容器非正常退出时重启容器,最多重启3次。
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但不考虑在Docker守护进程启动时就已经停止了的容器

4.为镜像打标签

docker tag centos:7 192.168.88.10:5000/centos:v1

5.上传到私有仓库

docker push 192.168.88.10:5000/centos:v1

6.列出私有仓库的所有镜像

curl http://192.168.88.10:5000/v2/_catalog

7.列出私有仓库的centos镜像有哪些tag

curl http://192.168.88.10:5000/v2/centos/tags/list

8.测试私有仓库下载

#本地下载私有仓库镜像
docker rmi -f 
docker pull 192.168.88.10/centos:v1#其他主机从私有仓库下载镜像
192.168.88.20
systemctl stop firewalld
setenforce 0192.168.88.70
vim /etc/docker/daemon.json
{#添加私有仓库地址"insecure-registries": ["http://192.168.88.10:5000"],"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}systemctl restart docker

二、Harbor 简介

1.什么是Harbor?

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。

Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。

Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

2.Harbor 的特性

  1. 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
  2. 基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。
  3. 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
  4. 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  5. 图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
  6. 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  7. 支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  8. Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

3. Harbor 的构成

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。
总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。

3.1Proxy

是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。

3.2Registry

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

3.3Core services

Harbor的核心功能,主要提供以下3个服务:

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

3.4Database(harbor-db)

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

3.5Job services

主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。

3.6Log collector(harbor-log)

负责收集其他组件的日志到一个地方。

三、部署 Harbor

 1.部署 Docker-Compose 服务

//下载或者上传 Docker-Compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composedocker-compose -v

2.部署 Harbor 服务

2.1下载或上传 Harbor 安装程序

cd /opt
上传harbor-offline-installer-v1.10.18.tgz压缩包tar zxvf harbor-offline-installer-v1.10.18.tgz 

2.2修改harbor安装的配置文件

vim /opt/harbor.yml
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.88.70
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

3.启动 Harbor

cd /opt/harbor/./prepare
./install.sh
如果./install.sh执行不成功,执行docker rm -f $(docker ps -aq)删除容器在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
再执行命令 ./install.sh 以 pull 镜像并启动容器

4.查看 Harbor 启动镜像

cd /opt/harbor/
docker-compose psdocker-compose up -d      #启动
docker-compose stop       #停止
docker-compose restart    #重新启动

5.创建一个新项目

(1)浏览器访问:http://192.168.88.70 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮(3)此时可使用 Docker 命令在本地通过 192.168.88.70 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。
//登录 Harbor
docker login [-u admin -p Harbor12345] http://192.168.88.70//将镜像打标签
格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag centos:7 192.168.88.70/library/centos:7//上传镜像到 Harbor
docker push 192.168.88.70/library/centos:7 (4)在 Harbor 界面 library 目录下可看见此镜像及相关信息

三、维护管理 Harbor

1.通过 Harbor Web 创建项目

在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。
如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,
命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

2.创建 Harbor 用户

2.1创建用户并分配权限

在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“zhangsan”,邮箱为“zhangsan@qq.com”,全名为“zhangsan”,密码为“Abc123456”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。角色				权限说明
访客				对于指定项目拥有只读权限
开发人员			对于指定项目拥有读写权限,但没用删除权限
维护人员			对于指定项目拥有读写权限,也能对修改其它配置,比如创建 Webhooks
项目管理员		除了读写权限,同时拥有用户管理/镜像扫描等管理权限

2.2添加项目成员

单击项目 -> myproject -> 成员 -> + 成员,填写上述创建的用户 zhangsan 并分配角色为“开发人员”。
附:此时单击左侧“...”按钮仍然可对成员角色进行变更或者删除操作

2.3在客户端上使用普通账户操作镜像

//先退出当前用户,然后使用上述创建的账户 kgc-zhangsan 登录
docker logout 192.168.88.70docker login 192.168.88.70
或
docker login -u zhangsan -p Abc123456 http://192.168.88.70//上传本地镜像
docker tag centos:latest 192.168.88.70/myproject/centos:latest
docker push 192.168.88.70/myproject/centos:latest//删除上述打标签的本地镜像
docker rmi 192.168.80.70/myproject/centos:latest//下载本地镜像
docker pull 192.168.80.10/myproject/centos:latest

四、实现 Harbor 高可用

1.在192.168.88.10上部署 Harbor

cd /opt
scp -r harbor/ 192.168.88.10:`pwd`#修改yml文件
cd /opt/harbor
vim harbor.yml
修改 
hostname: 192.168.88.10vim /etc/docker/daemon.json
添加 
{"insecure-registries": ["http://192.168.88.10"],"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}cd /opt/harbor
./install.sh

2.构建 Harbor 高可用

1.浏览器访问:http://192.168.88.10 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor123452.在 仓库管理 -> 新建目标3.在 复制管理 -> 新建规则

相关文章:

Docker--harbor私有仓库部署与管理

目录 一、构建私有库 1.下载 registry 镜像 2.在 daemon.json 文件中添加私有镜像仓库地址 3.运行 registry 容器 4.为镜像打标签 5.上传到私有仓库 6.列出私有仓库的所有镜像 7.列出私有仓库的centos镜像有哪些tag 8.测试私有仓库下载 二、Harbor 简介 1.什么是Harb…...

idea复制一份web服务在不同端口启动

Idea 运行多个微服务 Idea 一个服务开启多个端口运行 idea 开启多个端口服务_idea开启多个服务_HaHa_Sir的博客-CSDN博客 IntelliJ IDEA 中一个服务按多个端口同时启动与显示Services面板_一个服务多个端口_Touch&的博客-CSDN博客 Idea中一个服务按多个端口同时启动_idea…...

CRM系统化整合从N-1做减法实践 | 京东物流技术团队

1 背景 京销易系统已经接入大网、KA以及云仓三个条线商机,每个条线商机规则差异比较大,当前现状是独立实现三套系统分别做支撑。 2 目标 2022年下半年CRM目标是完成9个新条线业务接入,完成销售过程线上化,实现销售规则统一。 …...

STM32CUBUMX配置RS485(中断接收)--保姆级教程

———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…...

苹果iOS 16.6 RC发布:或为iPhone X/8系列养老版本

今天苹果向iPhone用户推送了iOS 16.6 RC更新(内部版本号:20G75),这是时隔两个月的首次更新。 按照惯例RC版基本不会有什么问题,会在最近一段时间内直接变成正式版,向所有用户推送。 需要注意的是,鉴于iOS 17正式版即将…...

【100天精通python】Day16:python 模块的搜索目录和导入模块异常时的处理方法

目录 1 搜索模块所在目录 2 模块不在搜索目录中 2.1 添加模块所在的目录到PYTHONPATH环境变量 2.2 修改sys.path 2.3 使用绝对路径导入 2.4将模块复制到Python搜索路径中的任意一个目录 2.5 总结 3 其他导入的模块异常处理 3.1 模块未安装 3.2 模块名称拼写错误 3.3模…...

SOC FPGA介绍及开发设计流程

目录 一、SoC FPGA简介 二、SoC FPGA开发流程 2.1 硬件开发 2.2 软件开发 一、SoC FPGA简介 SOC FPGA是在FPGA架构中集成了基于ARM的硬核处理器系统(HPS),包括处理器、外设和存储器控制器。相较于传统的仅有ARM处理器或 FPGA 的嵌入式芯片,SOC FPGA既…...

MySQL vs. Oracle: 函数比较与联系

引言 MySQL和Oracle是两个广泛使用的关系型数据库管理系统(RDBMS),它们提供了丰富的函数库来处理和操作数据。本文将详细介绍MySQL和Oracle的所有函数,并逐一介绍它们的相同和不同之处,以帮助读者更好地理解和使用这两…...

【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权

一、API接口文档平台 使用API接口文档不经可以很好的的维护接口数据,还给测试人员的接口测试工作带来了便利; 我们可以在全局配置文件中添加路由路径生成接口文档 1、使用docs接口文档维护接口 1.1在全局配置文件里指定用于支持coreapi的Schema # 指…...

经营简报及考核360表格

文章目录 经营简报效果图代码tableObjectSpanMethod.js 考核360委员会效果图 经营简报效果图不需要合并单元格且有汇总表头的 懒得封装了&#xff0c;所以整体没有封装 经营简报 效果图 代码 <template><el-tableref"tableRef":data"tableData.lengt…...

Spring Security 构建基于 JWT 的登录认证

一言以蔽之&#xff0c;JWT 可以携带非敏感信息&#xff0c;并具有不可篡改性。可以通过验证是否被篡改&#xff0c;以及读取信息内容&#xff0c;完成网络认证的三个问题&#xff1a;“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全&#xff0c;使用它需要采用 …...

PyTorch从零开始实现Transformer

文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码&#xff08;可直接运行&#xff09; 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…...

运动蓝牙耳机什么牌子的好用、最好用的运动蓝牙耳机推荐

音乐是运动的灵魂&#xff0c;而一款优秀的运动耳机则是让音乐与我们的身体完美融合的关键。今天&#xff0c;我推荐五款备受运动爱好者喜爱的耳机&#xff0c;它们以卓越的音质、舒适的佩戴和出色的稳定性能脱颖而出&#xff0c;助你在运动中创造最佳状态。 1、NANK南卡Runne…...

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后&#xff0c;浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法&#xff1a;get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…...

【算法与数据结构】222、LeetCode完全二叉树的节点个数

文章目录 一、题目二、一般遍历解法三、利用完全二叉树性质四、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、一般遍历解法 思路分析&#xff1a;利用层序遍历&#xff0c;然后用num记录节点数量。其他的例如…...

登录和注册表单的11个HTML最佳实践

原文&#xff1a;11 HTML best practices for login & sign-up forms 原作者&#xff1a;Andrey Sitnik 翻译已获原文作者许可&#xff0c;禁止转载和商用 大多数网站都有登录或注册表单;它们是业务转换的关键部分。然而&#xff0c;即使是流行的站点也没有实现本文中提到的…...

Mysql删除历史数据

Mysql定时删除历史数据 实现 1.创建存储过程&#xff08;函数&#xff09; SQL DROP PROCEDURE IF EXISTS KeepDatasWith30Days CREATE PROCEDURE KeepDatasWith30Days() BEGINSELECT maxId:max(Id) FROM tableName WHERE CreateTime<DATE(DATE_SUB(NOW(),INTERVAL 31 D…...

Python—数据结构(一)

先放一张自己学习和整理归纳的思维导图&#xff0c;以便让大家都知道我自己的整体学习路线。 数据结构的学习路上内容枯燥&#xff0c;但坚持下来一定有很大的收获&#xff01;加油&#x1f4aa;&#x1f3fb;&#xff01; 数据结构 数据的概念数据元素&#xff1a; 若干基本…...

离线环境安装flask依赖包

找到当前版本需要的所有依赖包&#xff0c;生产flask项目生成项目依赖包文件requirements.txt 1)在当前项目目录下 生成requirements文件&#xff1a;pip freeze >requirements.txt 执行requirements文件&#xff0c;安装依赖包&#xff1a;pip install -r requirements.t…...

ChatGPT与Claude对比分析

一 简介 1、ChatGPT: 访问地址&#xff1a;https://chat.openai.com/ 由OpenAI研发,2022年11月发布。基于 transformer 结构的大规模语言模型,包含1750亿参数。训练数据集主要是网页文本,聚焦于流畅的对话交互。对话风格友好,回复通顺灵活,富有创造性。存在一定的安全性问题,可…...

登录和注册页面 - 验证码功能的实现

目录 1. 生成验证码 2. 将本地验证码发布成 URL 3. 后端返回验证码的 URL 给前端 4. 前端将用户输入的验证码传给后端 5. 后端验证验证码 1. 生成验证码 使用hutool 工具生成验证码. 1.1 添加 hutool 验证码依赖 <!-- 验证码 --> <dependency><groupId…...

HDFS的文件块大小(重点)

HDFS 中的文件在物理上是分块存储 &#xff08;Block &#xff09; &#xff0c; 块的大小可以通过配置参数( dfs.blocksize&#xff09;来规定&#xff0c;默认大小在Hadoop2.x/3.x版本中是128M&#xff0c;1.x版本中是64M。 如果一个文件文件小于128M&#xff0c;该文件会占…...

深度学习(二)

目录 一、神经网络 整体架构: 架构细节: 神经元个数的影响: 神经网络过拟合解决: 卷积网络 整体架构: 卷积层 边缘填充 特征尺寸计算 池化层 特征图变化 递归神经网络 一、神经网络 整体架构: 图中分别为输入层、隐层1、隐层2、输出层 通过输入层输入某数值&#xf…...

无涯教程-jQuery - wrapInner( html )方法函数

wrapInner(html)方法使用HTML结构包装每个匹配元素(包括文本节点)的内部子内容。 wrapInner( html ) - 语法 selector.wrapInner( html ) 这是此方法使用的所有参数的描述- html - 将动态创建并环绕目标的HTML字符串。 wrapInner( html ) - 示例 以下是一个简单的示例…...

【unity之IMGUI实践】单例模式管理数据存储【二】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…...

【C++】开源:Linux端ALSA音频处理库

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Linux端ALSA音频处理库。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…...

【Linux | Shell】结构化命令2 - test命令、方括号测试条件、case命令

目录 一、概述二、test 命令2.1 test 命令2.2 方括号测试条件2.3 test 命令和测试条件可以判断的 3 类条件2.3.1 数值比较2.3.2 字符串比较 三、复合条件测试四、if-then 的高级特性五、case 命令 一、概述 上篇文章介绍了 if 语句相关知识。但 if 语句只能执行命令&#xff0c…...

基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前信息和状态&#xff1b;通过语音识别模块对当前垃圾种类进行语音识别&#xff1b; 通过蜂鸣器进行声光报警提醒垃圾桶已满&#xff1b;采用舵机控制垃圾桶打开关闭&#xff1b;超声波检测当前垃圾桶满溢程度&#xff1…...

最新版本docker 设置国内镜像源 加速办法

解决问题:加速 docker 设置国内镜像源 目录: 国内加速地址 修改方法 国内加速地址 1.Docker中国区官方镜像 https://registry.docker-cn.com 2.网易 http://hub-mirror.c.163.com 3.ustc https://docker.mirrors.ustc.edu.cn 4.中国科技大学 https://docker.mirrors…...

深度学习——LSTM解决分类问题

RNN基本介绍 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如文本、语音、时间序列等具有时序关系的数据。 核心思想 RNN的关键思想是引入了循环结构&#xff0c;允许…...