docker Harbor私有仓库部署管理

        搭建本地私有仓库,但是本地私有仓库的管理和使用比较麻烦,这个原生的私有仓库并不好用,所以我们采用harbor私有仓库,也叫私服,更加人性化。     

一、什么是Harbor

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

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

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

1.1 harbor特性

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

② 基于镜像的复制策略: 镜像可以在多个Harbor实例之间进行复制(同步)。

③ 支持LDAP/AD: Harbor可以集成企业内部已有的AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。

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

图形化用户界面 用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。

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

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

⑧ Harbor和docker registry的关系 Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

1.2 Harbor的构成

Harbor 在架构上主要有 

proxyRegistryCore servicesDatabase(Harbor-db)Log collector(Harbor-log)Job services六个组件。        

proxy:反向代理

通过一个前置的发现代理统一 接受浏览器、docker客户端的请求 并且请求转发给后端的不通服务

Registry   负责存储docker镜像

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

认证方式有三种
令牌
用户密码
ssl

Core services   Harbor的核心功能

UI   提供图像界面

webhook    网站一些服务功能(通知机制)

token          令牌    提供身份验证服务

databases    核心组件     提供数据库服务

主要记录数据库镜像的元信息 以及用户的身份信息

log collector

复制日志(其他的组件日志上传  下载用户  访问等)收集  以供后期进行分析和健康检查等

Job services

主要用于镜像复制,本

地镜像可以同步到Harbor实例上

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 这样一个数据配置管理中心来完成

1.3 架构数据流向

1.所有的请求或认为的操作都会首先交给proxy(反向代理)
2.proxy会先将请求转发给后端Core services,Core services 中包含

3.UI、token(身份验证服务)、webhook(网站的一些服务功能)
4.转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过Core services中的token令牌的身份验证服务才行
5.每一次下载和上传都产生操作记录,生成日志,保存至database中
6.database记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作

私有仓库指向私有仓库的方式 有两种

1、/etc/docker/daemon.json
2、/usr/lib/systemd/system/docker.servce
   insecure-registrues $HARBOR_IP (私有仓库的IP地址)

二、Harbor的部署以及配置文件

2.1 Harbor部署

2.1.1 环境准备

主机ip组件
Harbor 服务器192.168.2.11docker-ce、docker-compose、harbor-offline-v1.2.2
client 服务器192.168.2.13docker-ce

前提准备:关闭防火墙,安装好docker

2.1.2 部署docker-compose

#上传下载好的docker-compose文件
docker-compose 

chmod  +x docker-compose 
mv  docker-compose  /usr/local/bin/docker-compose

#或者从github下载
curl -L https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2.1.3 下载Harbor软件包

#软件包下载地址  https://github.com/goharbor/harbor/releases/download/
#上传软件包到/opt/目录
ls harbor-offline-installer-v1.2.2.tgz 
#解压到/usr/local/目录
tar vxf harbor-offline-installer-v1.2.2.tgz  -C /usr/local/

2.1.4 修改Harbor安装的配置文件

vim /usr/local/harbor/harbor.cfg
#第5行,修改,设置Harbor的IP地址或者域名。如果设置为域名,则需要做域名映射
5// hostname = 192.168.10.26
#59行,指定管理员的初始密码的,默认的用户名/密码是 admin/Harbor12345
59// harbor_admin_password = Harbor12345

#在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
cd /usr/local/harbor/
./prepare

Harbor.cfg配置文件的两类参数

2.1.4.1可选参数

        这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。

        注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbor 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。 具体参数如下:
        ●Email:Harbor 需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才启用。请注意,在默认情况下 SSL 连接时没有启用。如果 SMTP 服务器需要 SSL,但不支持 STARTTLS,那么应该通过设置启用 SSL email_ssl = TRUE。

        ●harbor_admin_password:管理员的初始密码,只在 Harbor 第一次启动时生效。之后, 此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。

        ●auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。

        ●self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbor 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。

        ●Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。

        ●project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。 如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。

        ●verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。

        另外,默认情况下,Harbor 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。但需要更新 common/templates/registry/config.yml 文件。
        Harbor的默认镜像存储路径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。
        这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运行之前修改。
        如果希望将 Docker 镜像存储到其他的磁盘路径,可以修改这个参数。

2.1.4.2 所允许参数

        所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
        ●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.10.23 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。

        ●ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。

        ●max_job_workers:镜像复制作业线程。

        ●db_password:用于db_auth 的MySQL数据库root 用户的密码。

        ●customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。

        ●ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。

        ●secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

另外,默认情况下,Harbour 将镜像存储在本地文件系统上。
在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。
但需要更新 common/templates/registry/config.yml 文件。

2.1.5  启动Harbor

cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
再执行命令 ./install.sh 以 pull 镜像并启动容器

2.1.6 查看 Harbor 启动镜像

docker-compose ps

2.1.7 镜像控制

docker-compose up -d      #后台启动
docker-compose stop       #停止
docker-compose restart    #重新启动

2.1.8 创建一个新项目

(1)浏览器访问:http://192.168.2.11 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345

(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮

(3)填写项目名称为“myproject-zzh”,点击“确定”按钮,创建新项目

(4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上监听。

2.1.9 命令行登录 Harbor 【两种登录方式】

1.docker login http://127.0.0.1

2.docker login -u admin -p Harbor12345 http://127.0.0.1  

2.2 测试Harbor仓库

2.2.1 下载镜像进行推送测试

docker pull nginx

2.2.2 将镜像打标签

#格式:docker tag 镜像:标签 仓库IP/项目名称/镜像名:标签

docker tag nginx:latest 127.0.0.1/myproject-cph/nginx:v1


2.2.3 上传镜像到Harbor

docker push 127.0.0.1/myproject-cph/nginx:v1
#在 Harbor 界面 myproject-zzh 目录下可看见此镜像及相关信息

2.2.4 在其他客户端上传镜像

        以上操作都是在 Harbor 服务器本地操作。如果其他客户端登录到 Harbor,就会报如下错误。出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

[root@localhost ~]# docker login -u admin -p Harbor12345 http://192.168.2.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.10.26/v2/": dial tcp 192.168.10.26:443: connect: connection refused

2.2.5 在 Docker 客户端配置操作【192.168.2.13】

#解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.2.13 --containerd=/run/containerd/containerd.sock

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.2.13

重启docker,再次登录

systemctl daemon-reload
systemctl restart docker

2.2.6 再次登录Harbor

docker login -u admin -p Harbor12345 http://192.168.2.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Login Succeeded

2.2.7 下载镜像进行测试

docker push 192.168.2.12/myproject-cph/nginx:v1
docker images
REPOSITORY                                TAG       IMAGE ID       CREATED        SIZE
192.168.2.12/myproject-zzh/nginx   v1        605c77e624dd   6 months ago   141MB

2.2.8 上传镜像测试

docker pull  centos 

docker tag centos:latest 192.168.2.11/myproject-cph/centos:v1 docker push 192.168.2.11/myproject-zzh/centos:v1

三、管理(维护)Harbor的项目

3.1 通过 Harbor Web 创建项目

        在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。

        单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker Hub 一致。

3.1.1 创建Harbor用户

        在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,填写用户名为“cph”,邮箱为“cph@163.com”,全名为“cph”,密码为“ Abc123456 ”,注释为“管理员”(可省略)。

        附:用户创建成功后,单击左侧“…”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

        角色 权限说明
        访客 对于指定项目拥有只读权限
        开发人员 对于指定项目拥有读写权限,但没用删除权限
        维护人员 对于指定项目拥有读写权限,也能对修改其它配置,比如创建 Webhooks
        项目管理员 除了读写权限,同时拥有用户管理/镜像扫描等管理权限

3.1.2 添加项目成员

单击项目 -> myproject-gb-> 成员 -> + 成员,填写上述创建的用户zzh 并分配角色为“开发人员”。

附:此时单击左侧“…”按钮仍然可对成员角色进行变更或者删除操作

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

#删除上述打标签的本地镜像
docker rmi 5d0da3dc9764 -f
#使用上述创建的账户登录
docker login -u cph -p Abc123456 http://192.168.2.11

#下载和上传镜像进行测试
docker pull 192.168.10.26/myproject-zzh/centos:v1

docker tag 192.168.10.26/myproject-zzh/nginx:v1 192.168.10.26/myproject-zzh/nginx:v2
docker push 192.168.10.26/myproject-zzh/nginx:v2

3.1.4 查看日志

web 界面日志,操作日志按时间顺序记录用户相关操作

四、远程同步

4.1 安装第二台harbor

安装上面的安装步骤在客户端安装harbor服务,做第二台harbor服务器

4.2 配置同步

在192.168.2.11主上配置

192.168.2.11切换用户admin-> 复制管理 -> +目标 -> 目标名称zzh -> 目标URL http://192.168.2.14 -> 用户名密码admin/Harbor12345 -> 确定

添加规则:项目 -> 选择项目名称 -> 复制 -> +复制规则 -> 名称zzh ->启动 -> 目标名称zzh ->测试连接 ->确定

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端热门框架【vue框架】】——事件处理与表单输入绑定以及学习技巧,让学习如此简单

👨‍💻个人主页:程序员-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

Linux IP Forwarding路由转发实验

linux 路由转发功能 Linux 操作系统具备路由转发功能,路由功能是指 Linux 操作系统提供的路由管理和转发功能,它允许 Linux 主机在网络中正确地转发数据包,并确保数据包能够达到其目的地。 出于安全考虑,Linux系统默认是禁止数据…

主生产计划有多重要,看完这篇就懂了

导 读 我们是否也经常遇到: 有时工厂加班加点也不能完成任务, 有时设备闲置,很多工人没有活干, 我们是不是还没运行主生产计划管理? 什么是主生产计划 在制造业中,主生产计划(MPS)是根据销售…

泛型通配符

泛型&通配符 文章目录 泛型&通配符一、泛型介绍&理解1.1 泛型概述&使用(集合/比较器)1.2 自定义范型结构(类/接口/方法) 二、通配符&读写特点三、企业真题 一、泛型介绍&理解 1.1 泛型概述&使用(集合/比较器) 泛型:类似于场景中的标签…

Android getevent命令详细分析

在调试Android 的输入事件时,经常使用 “getevent -lrt” 命令,来确认驱动上报数据是否正常。从源码的角度来详细的分析一下getevent 这个程序。 首先用ls命令来看一下getevent lrwxr-xr-x 1 root shell 7 2023-11-20 10:08 system/bin/getevent -> …

学习java中的interface接口

1.了解接口 java提供了一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口 格式: public interface 接口名{ //成员变量(常量) //成员方法(抽象方法) } 注意:接…

cmake进阶:宏定义

一. 简介 前面学习了 CMakeLists.txt语法中是如何定义函数,本文继续学习 cmake中的宏定义。 二. cmake进阶:宏定义 cmake 提供了定义宏的方法,cmake 中函数 function 和宏定义 macro 在某种程度上来说是一样的,都是创建一段有…

Linux 内核简介

操作系统简介 操作系统概念:操作系统处于硬件和应用程序的中间层,控制和管理整个计算机系统的硬件和软件资源,提供给用户和其他软件方便的接口和环境,它是计算机系统的最基本的系统软件。 操作系统功能: 处理机管理存储器管理设…

硬件四舍五入模式

文章目录 舍入模式1. 就近舍入2.向0舍入3.远离0舍入4. 向正无穷舍入5. 向负无穷舍入6.向负无穷舍入7. ROUND TO MATH参考资料 舍入模式 为了减小舍入操作对推理结果的精度影响,AI芯片有时会支持多种舍入模型(round mode)供编程人员选择,常见模式如下表&…

websevere服务器从零搭建到上线(二)|Linux上的五种IO模型

文章目录 阻塞 blocking非阻塞 non-blockingIO复用 IO multiplexing信号驱动 signal-driven异步 asynchronous拓展知识 看过上篇文章英国基本能理解本文五张图的内容websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步 本文要能够在…

IP地址类型

这些IP地址中有IPv4和IPv6地址,以及一些是链路本地地址(通常用于本地网络中的通信),而另一些则是可以被路由的公共或私有IP地址。 这里是您提供的IP地址的一些简要说明: IPv6 链路本地地址:以fe80:开头的地址是IPv6链路本地地址。这些地址仅用于同一链路(如以太网段或无…

Verilog中求两个数的差值

根据输入信号a,b的大小关系,求解两个数的差值:输入信号a,b为8bit位宽的无符号数。如果a>b,则输出a-b,如果a≤b,则输出b-a。 接口信号图如下: 代码如下: (CSDN代码块不支持Veril…

SpringBoot 使用 @RequiredArgsConstructor(onConstructor_ = @Autowired) 报错解决

若使用 RequiredArgsConstructor(onConstructor_ Autowired) 启动报错,或者爆红可以使用以下方法解决 1. 安装或启用 Lombok插件 2. 检查 Lombok 版本 3. 若 onConstructor_ 爆红, 可能是IDEA中文软件包冲突 4. 若以上还是不行,可以添加…

数据结构-二叉树-二叉搜索树

一、概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者具有以下性质的二叉树: 若它的左子树不为空,则左树上所有节点的值都小于根节点的值。 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。 它…

27.leetcode---随机链表的复制(Java版)

题目链接: https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 题目解析: 使用map来解这个题就比较方便了 代码: 测试:

手机异地组网方案?

现代社会,随着信息技术的快速发展,人们之间的通信需求也日益增加。尤其是在异地工作、异地学习、异地旅游等情况下,我们需要实现不同地区间的快速组建局域网,以解决电脑与电脑、设备与设备、电脑与设备之间的信息远程通信问题。本…

深度学习中的注意力机制一(Pytorch 15)

一 简介 灵长类动物的视觉系统接受了大量的感官输入,这些感官输入远远超过了大脑能够完全处理的程度。然而, 并非所有刺激的影响都是相等的。意识的聚集和专注使灵长类动物能够在复杂的视觉环境中将注意力引向感 兴趣的物体,例如猎物和天敌。…

C语言 函数递归

函数递归 一、递归是什么&#xff1f; 递归是学习C语⾔函数绕不开的⼀个话题&#xff0c;那什么是递归呢&#xff1f; 递归其实是⼀种解决问题的⽅法&#xff0c;在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 写⼀个史上最简单的C语⾔递归代码&#xff1a; #include <…

量水堰计使用手册:流量监测的关键工具

在水资源管理、环境监测、工业应用中&#xff0c;精确测量流体流量是至关重要的。量水堰计是一种流行且有效的工具&#xff0c;用于监测开放水道中的水流量。本文将详细介绍量水堰计的原理、安装、使用方法及常见问题解决策略&#xff0c;旨在帮助用户更好地理解和运用该设备。…

Python 机器学习 基础 之 构建第一个机器学习应用

Python 机器学习 基础 之 构建第一个机器学习应用 目录 Python 机器学习 基础 之 构建第一个机器学习应用 一、简单介绍 二、第一个机器学习测试应用介绍&#xff1a;鸢尾花分类 三、第一个机器学习测试应用 &#xff1a;前置环境&#xff0c;知识点介绍 jupyter notebo…