Docker的私有仓库部署-Harbor

目录

一. Docker原生私有仓库  Registry

1. Registry 的介绍

2. Registry  的部署过程

二. Registry 的升级——Habor

1. Harbor 简介

2. Harbor 特性

3. Harbor 的构成

4. Harbor 部署

4.1 部署 Docker-Compose 服务

4.2 部署 Harbor 服务

4.2.1 下载或上传 Harbor 安装程序

4.2.2 修改 harbor 安装的配置文件

4.2.3 启动 Harbor

4.2.4 查看 Harbor 启动镜像

4.2.5 创建一个新项目

4.2.6 在其他客户端上传镜像

三. 维护管理 Harbor

1. 通过 Harbor Web 创建项目

2. 创建 Harbor 用户

2.1 创建Harbor用户

2.2 添加项目成员

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

2.4 查看日志

2.5 修改 Harbor.cfg 配置文件

2.5 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

2.6 如需重新部署,需要移除 Harbor 服务容器全部数据

四. Harbor 的备用机的设置

4.1 再次安装一台Harbor 

4.2 复制过程

4.2.1 添加复制对象 

4.2.2 进行项目的选择复制 

4.2.3 查看备份机中的项目


一. Docker原生私有仓库  Registry

1. Registry 的介绍

关于 Docker 的仓库分为私有库和公有仓库,公有仓库只要在官方注册用户,登录即可使用。但对于仓库的使用,企业还是会有自己的专属镜像,所以私有库的搭建也是很有必要的存在。

对于原生的仓库,Docker 提供了 Registry,它能帮助我们组建属于自己的私有库,但是缺点也比较明显,就是难管理,无法进行复杂的操作

2. Registry  的部署过程

首先下载 registry 镜像

docker pull registry

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

vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.44.50:5000"],						#添加,注意用逗号结尾
  "registry-mirrors": ["https://s9jnjeah.mirror.aliyuncs.com"]
}

修改完配置重启服务

运行 registry 容器

docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
-----------------------------------------------------------------------------------------
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always:这是重启的策略,在容器退出时总是重启容器
--name registry:创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像

Docker容器的重启策略如下:
no:默认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

为镜像打标签

上传到私有仓库

docker push 192.168.44.50:5000/centos:v1

列出私有仓库的所有镜像

curl http://192.168.44.50:5000/v2/_catalog

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

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

删除测试:

二. Registry 的升级——Habor

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。

了解 AD/LDAP

2. Harbor 特性

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

3. Harbor 的构成

docker Harbor私有仓库的过程

docker Harbor私有仓库的过程
1.所有的请求或认为的操作都会首先交给proxy(反向代理)
2.proxy会先将请求转发给后端Core services,Core services 中包含 UI、token(身份验证服务)、webhook(网站的一些服务功能)
3.转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过Core services中的token令牌的身份验证服务才行
4.每一次下载和上传都产生操作记录,生成日志,保存至database中
5.database记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作

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

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

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

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

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

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

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

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

Log collector(harbor-log):负责收集其他组件的日志到一个地方。

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

4. Harbor 部署

4.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-compose

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

docker-compose --version

4.2 部署 Harbor 服务

4.2.1 下载或上传 Harbor 安装程序
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz

tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

4.2.2 修改 harbor 安装的配置文件
修改harbor安装的配置文件
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.44.60  #这里的地址修改成了192.168.44.60
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
1、所需参数:这些参数需要在配置文件 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 密码的密钥路径。

2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 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 镜像存储到其他的磁盘路径,可以修改这个参数。

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

注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbor 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。

解释:
这段描述是关于Harbor——一个开源的Docker registry项目,重点在于其配置文件Harbor.cfg的使用规则以及一些关键参数,特别是与认证模式(auth_mode)相关的设定注意事项。下面是对这段话的解析:

可选参数的处理
Harbor允许用户在配置文件Harbor.cfg中设置一系列参数来定制服务。其中,某些参数被标记为“可选”,意味着它们在初次部署Harbor时并非必须填写或可以接受默认值。这些参数的一个便利之处在于,即便在初次配置时采用了默认设置,用户之后仍然可以在Web用户界面(UI)上进行调整和更新,无需直接修改配置文件。

Harbor.cfg的时效性
值得注意的是,Harbor.cfg文件的修改仅在Harbor首次启动时被读取并应用。这意味着一旦Harbor服务启动并运行后,对Harbor.cfg所做的任何改动将不会自动反映到正在运行的系统中。换句话说,首次配置后,想要更改这些参数,应该通过Web UI来进行,而不是直接编辑配置文件。

auth_mode参数的重要性
特别强调的是auth_mode(认证模式)这一参数,它决定了Harbor如何处理用户认证。Harbor支持不同的认证方式,比如使用内置数据库认证或与LDAP等外部认证服务集成。关键在于,一旦系统中有用户存在(除了初始化时预设的admin用户之外),auth_mode就不能再更改。这是因为改变认证模式可能会导致现有用户无法正常登录或权限混乱。因此,如果需要调整认证模式,必须在添加任何其他用户或进行任何其他操作之前,在Web UI上完成设置。

实践建议
首次配置谨慎:在首次部署Harbor时,仔细考虑认证模式和其他关键参数的设置,因为某些设置之后不易更改。
及时调整UI设置:如果计划通过UI而非配置文件调整参数,务必在Harbor启动后立即登录Web界面完成设置,特别是在涉及到认证模式这样的关键配置时。
避免后期修改auth_mode:确保在系统中创建任何额外用户前确定好认证模式,避免因用户存在而锁死修改权限。
遵循以上指南,可以帮助确保Harbor的平稳运行及灵活管理。
4.2.3 启动 Harbor
cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
再执行命令 ./install.sh 以 pull 镜像并启动容器

如果出现版本报错:

不要慌 修改如下:

重新安装就可以了 不要问我为什么这样,就问好没好吧 

4.2.4 查看 Harbor 启动镜像
查看 Harbor 启动镜像
cd /usr/local/harbor/
docker-compose ps

4.2.5 创建一个新项目
创建一个新项目
(1)浏览器访问:http://192.168.44.60 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345

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

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

(4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。
//登录 Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1

//下载镜像进行测试
docker pull nginx

//将镜像打标签
格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/xyl-love-study/nginx:v1

//上传镜像到 Harbor
docker push 127.0.0.1/xyl-love-study/nginx:v1

(5)在 Harbor 界面 myproject-kgc 目录下可看见此镜像及相关信息

登录 Harbor

下载镜像进行测试

将镜像打标签

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

上传镜像到 Harbor

在 Harbor 界面 myproject-kgc 目录下可看见此镜像及相关信息

4.2.6 在其他客户端上传镜像

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

在 Docker 客户端配置操作

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

两种方法:

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

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

刷新配置,重新登录

重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker

再次登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.44.60
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
//将自动保存凭据到/root/.docker/config.json,下次登录时可直接使用凭据登录 Harbor

下载镜像进行测试

docker pull 192.168.44.60/xyl-love-study/nginx:v1

上传镜像进行测试

docker pull cirros
docker tag cirros:latest 192.168.44.60/xyl-love-study/cirros:v2
docker push 192.168.44.60/xyl-love-study/cirros:v2

刷新 Harbor 的 Web 管理界面进行查看,会发现 xyl-love-study 项目里面有两个镜像

删除镜像  

三. 维护管理 Harbor

1. 通过 Harbor Web 创建项目

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

2. 创建 Harbor 用户

(1)创建用户并分配权限
在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“name-xyl”,邮箱为“pj-xyl@school.com”,全名为“xuyiling”,密码为“Abc123456”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

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

(3)在客户端上使用普通账户操作镜像
//删除上述打标签的本地镜像
docker rmi 192.168.44.60/xyl-love-study/cirros:v2

//先退出当前用户,然后使用上述创建的账户 kgc-zhangsan 登录
docker logout 192.168.44.60

docker login 192.168.44.60
或
docker login -u name-xyl -p Abc12345 http://192.168.44.60

//下载和上传镜像进行测试
docker pull 192.168.44.60/xyl-love-study/cirros:v2

docker tag cirros:latest 192.168.44.60/xyl-love-study/cirros:v3
docker push 192.168.44.60/xyl-love-study/cirros:v3

2.1 创建Harbor用户

创建用户并分配权限
在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“name-xyl”,邮箱为“pj-xyl@school.com”,全名为“xuyiling”,密码为“Abc123456”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

2.2 添加项目成员

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

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

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

//删除上述打标签的本地镜像
docker rmi 192.168.44.60/xyl-love-study/cirros:v2

//先退出当前用户,然后使用上述创建的账户 xyl-love-study 登录
docker logout 192.168.44.60

docker login 192.168.44.60
或
docker login -u name-xyl -p Abc123456 http://192.168.44.60

//下载和上传镜像进行测试
docker pull 192.168.44.60/xyl-love-study/cirros:v2

docker tag cirros:latest 192.168.44.60/xyl-love-study/cirros:v3
docker push 192.168.44.60/xyl-love-study/cirros:v3

2.4 查看日志


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

2.5 修改 Harbor.cfg 配置文件

要更改 Harbor的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;
然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbor 的实例。

使用 docker-compose 管理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运行。
cd /usr/local/harbor
docker-compose down -v

vim harbor.cfg			#只能修改可选参数

./prepare

docker-compose up -d

这里效果出不来,依旧可以注册 不知为何!

遇到报错尝试

//如果有以下报错,需要开启防火墙 firewalld 服务解决
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

systemctl restart firewalld.service
docker-compose up -d

2.5 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

//在Harbor服务器上操作
(1)移除 Harbor 服务容器
cd /usr/local/harbor
docker-compose down -v

(2)把项目中的镜像数据进行打包
//持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下
ls /data/registry/docker/registry/v2/repositories/xyl-love-study
cd /data/registry/docker/registry/v2/repositories/xyl-love-study
tar zcvf xyl-love-study.tar.gz ./*

2.6 如需重新部署,需要移除 Harbor 服务容器全部数据

cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

四. Harbor 的备用机的设置

4.1 再次安装一台Harbor 

再次开启一台主机,按照前面的步骤安装一台Harbor服务器 

4.2 复制过程

4.2.1 添加复制对象 

服务端(要复制的主机):登录Harbor管理员

复制管理=》目标=》+目标=》目标填写

输入对方主机的用户名和密码,URL  等待,进行测试连接,如果没问题就可以确定 

4.2.2 进行项目的选择复制 

 服务端中:

项目=》点击要复制的项目名=》复制 =》 +复制规则

编写好复制规则,进行测试连接,如果无误,就可以确认

4.2.3 查看备份机中的项目

总结:

docker 核心组件
① Proxy 反向代理

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

负责存储 docker 镜像
处理 docker pull/push 命令来做上传/下载
③  Core services

Harbor的核心功能包括:

  • ui 提供图像界面
  • webhook 网站一些服务功能(通知机制)
  • token 令牌 提供身份验证服务

④ Log collector

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

为核心组件提供数据库服务
主要记录数据库镜像的元信息以及用户的身份信息

⑥ Job services:
主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
⑦ adminserver
管理员用于管理 用户操作以及身份认证等

docker Harbor私有仓库的过程

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.service

   insecure-registrues $HARBOR_IP (私有仓库的IP地址)

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

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

相关文章

18_Scala面向对象编程trait

文章目录 trait1.定义trait2.向类中混入特质2.1没有父类2.2有父类 3.动态混入3.1动态混入查询功能到公司业务中 4.父类,子类,特质初始化优先级5.Scala功能执行顺序6.常用API trait –特质的学习需要类比Java中的接口,源码编译之后就是interf…

三种方法解决:检测到在集成的托管管道模式下不适用的 ASP.NET 设置

几天前配置一个IIS环境的网站时,出现500错误。根据错误提示,很快把问题解决了,现记录一下,希望能帮到遇到同样问题的网友。 问题描述 (点击图片放大) 应用程序“DEFAULT WEB SITE”中的服务器错误Internet Information Services 7.5错误摘要 HTTP 错误 500.24 - Interna…

抓包证书安装到安卓7.0+手机

前言: 首先理解一下,这个不只是证书到浏览器,而是抓包证书到安卓7.0+手机上的文章; 还有一点区分,在浏览器上装的证书,只是让抓包工具可以抓取手机浏览器的包,而不是抓取手机app上的包; 如果你的证书只是简单的在浏览器下进行安装,那么你的手机app是走不了代理网络的…

视频教程下载:为 GPTs 商店构建 10 个 GPTs获得被动收入

欢迎来到 AI 驱动的内容创作新时代 - GPT 商店。这门综合课程是您成为定制和利用 GPT 模型解决多样化应用的专家的路线图。无论你是错过了应用商店革命的初始浪潮还是乘着它取得了成功,这都是你站在下一个重大数字飞跃前沿的机会。 课程模块: - 介绍 Ch…

Dragonfly 拓扑的路由算法

Dragonfly 拓扑的路由算法 1. Dragonfly 上的路由 (1)最小路由(2)非最小路由 2. 评估 Dragonfly 拓扑的路由算法 John Kim, William J. Dally 等人在 2008 年的 ISCA 中提出技术驱动、高度可扩展的 Dragonfly 拓扑。而文章中也提到了 针对 Dragonfly 拓扑的路由算法。本文对…

java-函数式编程-语法

目录 1、函数表现形式 分类 lambda表达式 参数类型可以全写,也可以全不写,但不能一部分写,一部分不写lambda 的省略策略:凡是可推导,都可以省略

【c++算法篇】双指针(上)

🔥个人主页:Quitecoder 🔥专栏:算法笔记仓 朋友们大家好啊,本篇文章我们来到算法的双指针部分 目录 1.移动零2.复写零3.快乐数4.盛水最多的容器 1.移动零 题目链接:283.移动零 题目描述: 算法…

Python量化炒股的数据信息获取—获取上市公司分红送股数据信息

Python量化炒股的数据信息获取—获取上市公司分红送股数据信息 上市公司分红送股数据,都存放在STK_XR_XD表中,该表保存在finance包中。要查看表中的数据信息,需要使用query()函数。 单击聚宽JoinQuant量化炒股平台中的“策略研究/研究环境”…

微服务---gateway网关

目录 gateway作用 gateway使用 添加依赖 配置yml文件 自定义过滤器 nacos上的gateway的配置文件 我们现在知道了通过nacos注册服务,通过feign实现服务间接口的调用,那对于不同权限的用户访问同一个接口,我们怎么知道他是否具有访问的权…

Grafana:云原生时代的数据可视化与监控王者

🐇明明跟你说过:个人主页 🏅个人专栏:《Grafana:让数据说话的魔术师》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Grafana简介 2、Grafana的重要性与影响力 …

开发体育赛事直播平台,研发技术选型与架构设计实现方案

本文将深入探讨“东莞梦幻网络科技”现成体育直播源码的技术实现方案,如何为用户提供流畅、互动、个性化的观赛体验。 一、技术栈选择:强强联合的基石1、后端开发:采用Java与PHP作为主要开发语言。Java以其强大的企业级应用支持,保…

双向冒泡法,可以只求最大最小值

int BiBubbleSort(int Arr[],int n,int maxnum){int left0,rightn-1;int i;bool notDone true;int temp;if(n<2)return -1;while(left<right&&notDone){ notDone false; //设置未发生交换标志 for(ileft;i<right;i){if(Arr[i]>Arr[i1]){//swap(Arr[…

初识指针(1)<C语言>

前言 指针是C语言中比较难的一部分&#xff0c;大部分同学对于此部分容易产生“畏难情结”&#xff0c;但是学习好这部分对C语言的深入很大的帮助&#xff0c;所以此篇主要以讲解指针基础为主。 指针概念 变量创建的本质就是在内存中申请空间&#xff0c;找到这个变量就需要地址…

tiny-Tcmalloc(高并发内存池)

项目地址&#xff08;绝对可运行&#xff09; 一. 初识高并发内存池 1、项目介绍 当前项目是实现一个高并发的内存池&#xff0c;它的原型是google的一个开源项目tcmalloc&#xff0c;tcmalloc全称Thread-Caching Malloc&#xff0c;即线程缓存的malloc&#xff0c;实现了高…

Pytorch 实现 GAN 对抗网络

GAN 对抗网络 GAN&#xff08;Generative Adversarial Network&#xff09;对抗网络指的是神经网络中包括两个子网络&#xff0c;一个用于生成信息&#xff0c;一个用于验证信息。下面的例子是生成图片的对抗网络&#xff0c;一个网络用于生成图片&#xff0c;另一个网络用于验…

Bookends for Mac:文献管理工具

Bookends for Mac&#xff0c;一款专为学术、研究和写作领域设计的文献管理工具&#xff0c;以其强大而高效的功能深受用户喜爱。这款软件支持多种文件格式&#xff0c;如PDF、DOC、RTF等&#xff0c;能够自动提取文献的关键信息&#xff0c;如作者、标题、出版社等&#xff0c…

Unity 性能优化之静态批处理(三)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、静态批处理是什么&#xff1f;二、使用步骤1.勾选Static Batching2.测试静态合批效果 三、静态合批得限制1、游戏对象处于激活状态。2、游戏对象有一…

Kannala-Brandt 鱼眼相机模型

最近在学习 ORB-SLAM3 的源代码&#xff0c;并模仿、重构了相机模型的实现 在学习的过程中发现针孔相机 (Pinhole) 与鱼眼相机 (Fisheye) 都有畸变参数&#xff0c;但是鱼眼相机无法使用 cv::undistort 函数去畸变 在对鱼眼相机的深度归一化平面进行可视化后&#xff0c;发现…

CNN实现卫星图像分类(tensorflow)

使用的数据集卫星图像有两类&#xff0c;airplane和lake&#xff0c;每个类别样本量各700张&#xff0c;大小为256*256&#xff0c;RGB三通道彩色卫星影像。搭建深度卷积神经网络&#xff0c;实现卫星影像二分类。 数据链接百度网盘地址&#xff0c;提取码: cq47 1、查看tenso…

swift微调多模态大语言模型

微调训练数据集指定方式的问题请教 Issue #813 modelscope/swift GitHubQwen1.5微调训练脚本中&#xff0c;我用到了--dataset new_data.jsonl 这个选项&#xff0c; 可以训练成功&#xff0c;但我看文档有提到--custom_train_dataset_path这个选项&#xff0c;这两个有什么…