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 六个组件。

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

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

Core 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 进行请求。

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 部署

(1)部署 Docker-Compose 服务

Docker-Compose一般在下载docker时已经安装,将他复制到/usr/local/bin/目录即可使用
 
find / -name docker-compose 
cp /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/
docker-compose -v   #查看版本

(2)部署 Harbor 服务

cd /opt
上传harbor压缩包
tar xf harbor-offline-installer-v1.10.18.tgz   #解压
mv harbor /usr/local/
cd /usr/local
cd harbor/
 
vim harbor.yml
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname:20.0.0.10
--27行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345
12-18行全部注释
 
----------------------------------------------------------------------------------------------------------
关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.80.10 或 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 镜像存储到其他的磁盘路径,可以修改这个参数。
----------------------------------------------------------------------------------------------------------

(3)启动 Harbor

cd /usr/local/harbor/
./install.sh

(4)创建一个新项目

 (1) 浏览器访问:http://20.0.0.10 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
 
(2)输入用户名和密码登录界面后可以创建一个新项目。点击“新建项目”按钮创建两个项目
 
(3)填写项目名称为“xy101”、“zx”,点击“确定”按钮,一个公开,一个私有,创建新项目

访问级别公开:项目中的镜像所有人都能下载,未登录仓库的用户都能下载 

访问级别私有:必须先登录用户,而且必须是项目的成员才能下载

(5)创建用户

点击“用户管理”,点击“创建用户”;创建两个用户

将成员分别加入到项目中;如下图所示
点击项目,选择scj项目,点击成员,点击+用户,姓名zx,角色项目管理员,创建

zx101项目中也将这两个用户添加

(6)本地上传镜像

vim /etc/docker/daemon.json
"insecure-registries": ["http://20.0.0.10"]
 
systemctl reload docker
docker info

docker login -u admin -p Harbor12345 http://20.0.0.10 #以admin用户登录仓库;admin为管理员
docker tag centos:7 20.0.0.10/zx101/centos:zx  #为镜像添加标签
docker push 20.0.0.10/zx101/centos:zx  #推送镜像到仓库
 
docker tag nginx:latest 20.0.0.10/zx101/nginx:zx
docker push 20.0.0.10/zx101/nginx:zx

(7)从Harbor下载镜像

添加一台docker服务器20.0.0.20
修改其配置,,对接私有仓库
 
vim /etc/docker/daemon.json 
{
   "insecure-registries": ["http://20.0.0.10"]
}
 
 
systemctl reload docker.service
docker pull 20.0.0.10/zx101/nginx:zx

如何从私有仓库下载镜像?

scj项目为私有仓库,内包含一个nginx镜像

在20.0.0.20服务器登录zx用户     
docker login -u zx -p Abc123456 http://20.0.0.10
docker pull 20.0.0.10/scj/nginx:scj
 
#想下载私有仓库的镜像,必须先登录项目中存在的用户再进行下载,若登录项目中存在的用户是无法下载的
退出用户:docker logout http://20.0.0.10

为成员设置标签时,维护人员具有下载删除上传权限,访客只有下载权限

docker pull 时,公开项目的镜像可以被任意用户拉取,私有项目的镜像需要先用项目成员登录仓库才能拉取

docker push 时 需要先用具有上传权限的项目成员登录仓库才能推送镜像

5、镜像同步

在20.0.0.20安装部署Harbor

快速安装

20.0.0.10

cd /opt
scp harbor-offline-installer-v1.10.18.tgz 20.0.0.20:/opt
cd /usr/local/bin/
scp docker-compose 20.0.0.20:`pwd`

20.0.0.20

docker-compose -v  #查看docker-compose是否安装
cd /opt
tar xf harbor-offline-installer-v1.10.18.tgz
mv harbor /usr/local/
cd /usr/local/harbor/
vim harbor.yml

 修改两台服务器指定仓库地址

20.0.0.20

vim /etc/docker/daemon.json
 
{
   "insecure-registries": ["http://20.0.0.10","http://20.0.0.20"]
}
 
 
systemctl reload docker
docker info
 
./install.sh

20.0.0.10

vim /etc/docker/daemon.json
{
  "insecure-registries": ["http://20.0.0.10","http://20.0.0.20"]
}
 
systemctl reload docker
docker info

 

登录两台服务器的harbor

(1)定时拉取

20.0.0.10服务器是存在镜像,20.0.0.20是空仓库

20.0.0.10创建仓库:点击仓库管理,点击新建目标

20.0.0.20创建仓库:点击仓库管理,点击新建目标

20.0.0.20harbor(定时拉取)

点击复制管理,点击新建规则

等待一分钟即可

(2)主动推送

删除20.0.0.20中添加的zx01规则,测试主动推送

20.0.0.10harbor

点击复制管理,点击新建规则

20.0.0.10服务器中上传镜像进行测试

6、管理harbor

查看harbor下容器状态

20.0.0.10

cd /usr/local/harbor   #必须在docker-compose.yml存在的目录下执行命令
docker-compose ps 

若发现其中有的容器状态不支持,显示down,如何解决? 

1、首先使用docker-compose restart重启看是否能够解决
2、若任然有组件不正常,先使用docker-compose down停止所有容器并删除;再使用docker-compose up -d重新创建启动容器
GitHub 加速计划 / ha / harbor
23.24 K
4.68 K
下载
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
最近提交(Master分支:2 个月前 )
9e55afbb pull image from registry.goharbor.io instead of dockerhub Update testcase to support Docker Image Can Be Pulled With Credential Change gitlab project name when user changed. Update permissions count and permission count total Change webhook_endpoint_ui Signed-off-by: stonezdj <stone.zhang@broadcom.com> Co-authored-by: Wang Yan <wangyan@vmware.com> 3 天前
3dbfd422 Signed-off-by: wang yan <wangyan@vmware.com> 3 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐