小白到运维工程师自学之路 第六十七集(Harbor企业镜像仓库部署)

news2024/11/27 0:41:17

一、概述

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 仓库服务。它以Docker公司开源的Registry为基础,提供了管理 UI。基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志 (Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。

Harbor 的优势

1、基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限。

2、基于镜像的复制策略: 镜像可以在多个 Harbor 实例之间进行复制(同步)。适用于负载平衡、高可用性、多数据中心、混合和多云场景。

3、支持 LDAP / AD:Harbor 与现有的企业 LDAP / ADA 集成,用于用户认证和管理。

4、图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。

5、图形 UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。

6、审计: 对存储库的所有操作都进行记录。

7、RESTful API:用于大多数管理操作的 RESTful API,易于与外部系统集成。

二、Harbor 架构构成

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

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

3、Core services 这是 Harbor 的核心功能,主要提供以下服务:

        ①、UI(Harbor-ui):提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。

        ②、Webhook:为了及时获取 registry 上image状态变化的情况,在Registry上配置webhook,把状态变化传递给UI模块。

        ③、Token 服务:负责根据用户权限给每个Docker push/pull命令签发token.Docker客户端向 Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向 Registry进行请求。

4、Database(Harbor-db):为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。

5、Log collector(Harbor-log):为了帮助监控 Harbor 运行,负责收集其他组件的log,供日后进行分析。

                                                    

 

三、准备工作

1、三台主机提前安装docker-ce

2、master、slave安装docker-compose

3、关闭防火墙

4、最好是有火狐浏览器(测试的时候用其他浏览器可能会报错)

四、安装部署

1、搭建nfs服务端

mkdir -p /data/nfs                                    创建共享目录
yum -y install nfs-utils rpcbind                      安装软件
cat <<END>> /etc/exports                                      
/data/nfs 192.168.77.0/24(rw,no_root_squash)          映射
systemctl start rpcbind                               启动软件
systemctl start nfs

主从服务器操作

yum -y install nfs-utils rpcbind
mkdir -p /data/storage
mount 192.168.77.16:/data/nfs /data/storage

 在nfs端操作

准备共享容器

docker pull redis:alpine
docker run -dit --name redis_test -p 6379:6379 redis:alpine

docker pull postgres
docker run -dit --name postgres_test -p 5432:5432 -e POSTGRES_PASSWORD=123123 postgres

docker pull mysql:5.6
docker run -dit --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8

docker rename postgres_test clair_db
docker rename mysql_test harbor_db
docker rename redis_test session

2、Harbor部署

tar xf harbor-offline-installer-v1.6.1.tgz
cd harbor/
tree ha

vim ha/initial-registry.sql            修改需要导入的数据库文件,不然会报错
CREATE DATABASE registry CHARACTER SET utf8;

 

yum -y install mysql
mysql -uroot -p123123 -h192.168.77.16 -P3306
source ha/initial-registry.sql

vim ha/docker-compose.yml
19行       - /data/storage:/storage:z	#修改成我们的nfs共享目录

vim harbor.cfg
7 hostname = 192.168.77.123

 

sh install.sh

 出现以下字段就表示成功了

 再查看容器确认一下都是UP

 登录镜像仓库,默认用户是admin 密码是Harbor12345

 

五、测试

创建一个新项目myproject-crushlinux 

docker login -u admin -p Harbor12345 http://127.0.0.1 登录仓库 默认是80端口

docker pull buysbox 下载一个小一点的镜像测试

docker tag busybox 127.0.0.1/myproject-crushlinux/busybox:syh  打标签
docker push 127.0.0.1/myproject-crushlinux/busybox:syh         上传镜像

 到仓库查看

docker logout 192.168.77.123 退出仓库

六、客户端上传镜像

vim /usr/lib/systemd/system/docker.service
13行  ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock  --insecure-registry 192.168.77.123 

重启后登录
systemctl daemon-reload 
systemctl restart docker
docker login -u admin -p Harbor12345 192.168.77.123

docker pull busybox       下载一个小一点的镜像进行测试

docker tag busybox 192.168.77.123/myproject-crushlinux/busybox:syh2
docker push 192.168.77.123/myproject-crushlinux/busybox:syh2

 查看

 七、Harbor 日常操作管理

1、通过 Harbor Web 创建项目 

点击“+项目”时按规范填写项目名称。项目级别:私有即不勾选(勾选后会变为"公开")。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker hub 一致。

2、创建 Harbor 用户 

①、创建用户并分配权限

系统管理->用户管理->创建用户,填写用户名为“crushlinux-user01”,邮箱为 crushlinux-user01@crushlinux.cn,全名为“harbor admin”,密码为“A123a456”,注释为“管理员”。

 

 

②、添加项目成员

项目-> myproject-crushlinux->成员->+成员,填写上述创建的用户并分配角色为“项目管理员”。

可对成员角色进行变更或者删除操作。

以上就是Harbor企业镜像仓库部署

如有错误欢迎各位大佬批评指正,我们共同进步

 

 

 

 

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

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

相关文章

微信开店小程序怎么做

微信开店小程序是一种在微信平台上运行的在线商店应用&#xff0c;它提供了丰富的功能和便捷的购物体验。下面将介绍微信开店小程序的功能以及带来的好处&#xff1a; 1. 商品展示与销售&#xff1a;微信开店小程序可以展示企业的商品信息&#xff0c;包括图片、价格、详细描述…

安装Win10操作系统时找不到任何驱动器的解决方法

安装Win10操作系统时找不到任何驱动器的解决方法 有时候在一台新电脑上使用U盘安装系统时提示&#xff1a;我们找不到任何驱动器。 如下图所示&#xff1a; 解决方法&#xff1a; 一、按F12&#xff08;不同电脑进入Bios的按键可能不同&#xff09;将电脑进入Bios画面&#x…

软件测试面试,这些坑你别踩,我已经替你踩过了

看看我写的软件测试面试时候的这些坑&#xff0c;你一定不能踩&#xff01;&#xff01;&#xff01; 第一个坑--测试用例编写没有思路&#xff0c;想起一条写一条。 分析&#xff1a; 该题目一般检查候选人编写测试用例的思路、覆盖度、深度。如果想起一条写一条&#xff0…

Linux基础与应用开发系列四:ARM-GCC与交叉编译

三个问题: ARM-GCC是什么?它与GCC有什么关系? 编译工具链和目标程序运行相同的架构平台&#xff0c;就叫本地编译 编译工具链和目标程序运行在不同的架构平台&#xff0c;叫做交叉编译 ARM-GCC是针对arm平台的一款编译器&#xff0c;它是GCC编译工具链的一个分支 虚拟机…

比亚迪与 Stingray达成合作,交互式车载KTV亮相,汽车也能卡拉OK

比亚迪公司与音乐媒体科技公司Stingray达成合作&#xff0c;计划从2023年开始&#xff0c;在全球多个市场推出车载KTV产品&#xff0c;成为新能源汽车的亮点。 根据比亚迪官方公众号发布的消息&#xff0c;比亚迪正在合作开发一款全新的娱乐系统。该系统计划支持多语言&#xf…

ESPFriends之ESP32模型部署训练历险记(一)

开发环境的部署搭建 超级小星星&#xff1a;时间过得可真快ESPFriends创客沙龙已经在武汉举办了两期&#xff0c;在这里有行业内的工程师、高校的学生以及极客&#xff0c;在这里我们交流分享自己的开发心得&#xff0c;提出遇到的“大坑”也可以得到小伙伴们的解决方案&#x…

SAP 请求合并

SAP 请求合并 由于公司请求管理要求比较高&#xff0c;经常需要将很多请求合并在一起传输&#xff0c;实际SAP是支持这个功能的&#xff0c;不仅可以将开发类的请求合并&#xff0c;还可以将开发和定制的合并在一起传输 1、合并请求 SE09 实用程序-重组-合并请求 看提示写的…

Qt--QPlugin插件

写在前面 Qt–动态链接库一文中提到&#xff0c;动态方式加载dll只能加载 extern "C“ 的导出函数&#xff0c;而无法加载类&#xff0c;因此可以使用Qt提供的插件来实现导出类的动态加载。 QPlugin是Qt插件框架的一部分&#xff0c;是一种轻量级的插件系统&#xff0c;…

K8S系列文章之 自动化运维利器 Ansible

Ansible-安装 第一步&#xff1a;安装我们的epel扩展源 yum -y install epel-release 我这里会报/var/run/yum.pid 已被锁定&#xff0c;如果没有直接进行下一步 [rootmaster home]# yum -y install epel-release 已加载插件&#xff1a;fastestmirror, langpacks /var/run/…

Bean的Aware接口

Aware 简介 Spring中提供了一些以Aware结尾的接口&#xff0c;实现了Aware接口的bean在被初始化之后&#xff0c;可以获取相应资源。比如BeanNameAware之类的以Aware结尾的接口&#xff0c;这个接口获取的资源就是以BeanName相关的。 通过Aware接口&#xff0c;可以对Spring相…

以产品经理的角度去讲解原型图---会议OA项目

目录 一.前言 二.原型图 2.1 原型图是什么 3.1 原型图的作用 三.演示讲解 3.1 项目背景 3.2 项目介绍 3.2.1 会议管理&#xff08;会议的发起&#xff0c;通知&#xff09; 3.2.2 投票管理&#xff08;会议的流程重大决策记录&#xff09; 3.2.3 会议室管理 3.2.4 系统管…

SDXL-Stable Diffusion改进版

文章目录 1. 摘要2. 算法&#xff1a;2.1 结构&#xff1a;2.2 微小的条件机制2.3 多宽高比训练2.4 改进自编码器2.5 所有组合放到一起2.6 主流方案比较 3. 未来工作4. 限制 论文&#xff1a; 《SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis…

HCL MPLS L2VPN BGP lsp

目录 1 拓扑 2 配置步骤 2.1 配置接口IP 和路由协议 2.2 配置MPLS LDP 2.3 配置L2VPN PW(BGP) 2.4 验证L2VPN 使用EVE-NG 中 的H3C 镜像&#xff0c;配置bgp 后&#xff0c;OSPF 会失效&#xff0c;可能镜像有问题&#xff0c;使用HCL没有问题。 1 拓扑 2 配置步骤 2.1…

【Axure动态面板】利用动态面板实现树形菜单的制作

利用动态面板&#xff0c;简单制作高保真的树形菜单。 一、先看效果 https://1poppu.axshare.com 二、实现思路 1、菜单无非就是收缩和展开&#xff0c;动态面板有个非常好的属性&#xff1a;fit to content&#xff0c;这个属性的含义是&#xff1a;面板的大小可以根据内容多少…

vue3-ts-vite:vue 项目 配置 多页面应用

一、Vue项目&#xff0c;什么是多页面应用 Vue是一种单页面应用程序&#xff08;SPA&#xff09;框架&#xff0c;这意味着Vue应用程序通常只有一个HTML页面&#xff0c;而在该页面上进行动态的内容更改&#xff0c;而不是每次都加载新的HTML页面。 但是&#xff0c;有时候我…

C++动态内存管理 - new和delete

目录 开胃菜 - 浅析C/C的内存分段 内存分段 各段说明 new和delete的基础用法 深度剖析new 定位new 浅析delete malloc/free和new/delete的异同 开胃菜 - 浅析C/C的内存分段 这部分是计算机系统相关的知识&#xff0c;这里只是先浅谈一下&#xff0c;可能有些内容会有冲…

初学绘画就上手!7款AI绘图免费软件精选推荐!

本篇文章将分享7款个人非常喜爱的AI绘图免费软件&#xff0c;一起来看看吧。 即时灵感 即时灵感 " 是一款全新升级的 AI 绘画工具&#xff0c;为创作者们提供了丰富多样的创作体验和强大功能。这个创新工具旨在让创作过程更加简单、便捷&#xff0c;同时提供高质量的作品…

Jenkins+Nginx+vue

安装nodejs 在这里插入图片描述 echo off xcopy C:\ProgramData\Jenkins\.jenkins\workspace\super_manage_vue\dist F:\java\www\super_manage_vue\ /s /e /y echo 复制文件完成 exit安装niginx 配置文件如下 #user nobody; worker_processes 1;#error_log logs/error.lo…

反射调用private方法的坑

使用反射调用私有方法时&#xff0c;发现空指针异常&#xff0c;无法直接注入导致空指针异常 加入如下代码后&#xff0c;恢复正常 if (AopUtils.isCglibProxy(marketSmsTaskService)) {// 如果是cglib代理对象&#xff0c;则转为原始对象marketSmsTaskService (MarketSmsTas…

与身边的人有差距,我选择只跟自己比并发展自己的长处!

文章目录 方向一&#xff1a;简述自己的感受方向二&#xff1a;聊聊你想怎么做方向三&#xff1a;如何调整自己的心态 虽然清楚知识需要靠时间沉淀&#xff0c;但在看到自己做不出来的题别人会做&#xff0c;自己写不出的代码别人会写时还是会感到焦虑怎么办&#xff1f; 你是…