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

目录

一 Harbor是什么

1.Harbor概述

2.为什么要学Harbor

二 Harbor的特性

三 Harbor的构成及数据流向

1.Harbor的架构

2.Harbor组件详解

3.Harbor私有仓库的数据流向

4.Harbor.cfg配置文件参数详解

(1)所需参数 

(2)可选参数

四 Harbor私有仓库的搭建与部署

1.部署Docker-Compose服务(192.168.27.30)

(1)下载或者上传Docker-Compose

故障排除1:

故障排除2:

​编辑

2.部署Harbor服务 (192.168.27.30)

(1)下载或上传 Harbor 安装程序

(2)修改harbor安装的配置文件

3.启动Harbor(192.168.27.30)

故障排除3: 

 4.查看Harbor启动镜像(192.168.27.30)

5.创建一个新项目(192.168.27.30)

(1)登录Harbor

(2)下载镜像测试

(3)给镜像打标签

(4)上传镜像到Harbor

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


一 Harbor是什么

1.Harbor概述

Harbor是一个开源的容器镜像仓库管理工具,它专注于存储、分发和管理Docker镜像。作为一个云原生的解决方案,Harbor提供了安全性和可扩展性,使组织能够建立自己的私有镜像仓库。Harbor提供了用户身份验证、访问控制和镜像复制等功能,使用户能够更好地管理和控制镜像的存储和分发。通过Harbor,组织可以实现更高级别的镜像管理,确保镜像的安全性和可用性,同时提升开发和部署的效率。

2.为什么要学Harbor

  • 私有镜像仓库:构建自己的私有镜像仓库,提供更高安全性和可控性。
  • 安全性和审计:提供身份验证、访问控制和审计日志等功能,保护镜像安全与合规性。
  • 高效管理和分发:轻松上传、下载、共享和托管Docker镜像,提升管理效率。
  • 集成与扩展性:支持与其他工具和系统的集成,满足不同需求和定制化。
  • 协作和共享:建立共享的镜像仓库,促进团队成员之间的协作与共享。

学习Harbor将使你能够更好地管理和控制Docker镜像,提供更高级别的安全性和可控性,同时提升团队的协作和生产力。这对于任何使用Docker进行应用程序开发和部署的组织来说都是非常有价值的。 


二 Harbor的特性

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

 Harbor具有灵活的权限控制、镜像复制、LDAP/AD集成、图形化界面、审计管理和RESTful API等特性,提供了强大而便捷的镜像仓库管理功能。

扩展:LDAP和AD都是用于身份验证和访问控制的目录服务协议。

LDAP是一种轻量级的目录访问协议,常用于组织内部的用户认证和用户信息管理。它使用树状结构来组织和存储用户、组和其他目录对象的信息。LDAP提供了灵活的权限控制和查询功能,允许用户通过用户名和密码进行身份验证,并获取相关的用户属性信息。

AD是由微软开发的目录服务,是一种更为复杂和全面的目录服务解决方案。它不仅提供了身份验证、用户信息管理的功能,还包括了域名服务、安全策略、组策略、文件共享等多个方面的功能。AD在Windows环境中广泛应用,可以用于组织内部的用户认证、授权和资源管理。


三 Harbor的构成及数据流向

1.Harbor的架构

Docker-Harbor私有仓库部署与管理_第1张图片

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

2.Harbor组件详解

  • proxy :通过一个前置的反向代理统一接收浏览器    docker 客户端请求的,并且请求转发给后端不同的服务,这是一个方向代理组件。
  •  registry: 负责存储 docker镜像  处理docker pull/push 命令来上传和下载。
  • core services:harbor核心功能,包括 UI、webhook、token 服务。

        ① webhook: 负责网站的一些服务功能;;

        ②token:令牌  ,提供身份认证服务;

        ③UI:  显示可视化界面。

  •  database :为core service 提供数据的服务  数据库记录镜像的元信息及用户的身份信息。
  • 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 这样一个数据配置管理中心来完成。

 扩展:

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

①令牌认证:通过令牌认证,用户可以获取一个访问令牌(Token),并将其用于身份验证。令牌可以是临时的,也可以是长期有效的。通过令牌认证,用户可以以匿名方式或具有特定权限的方式访问Harbor镜像仓库。

②用户密码认证:这是最常见的认证方式,用户需要提供用户名和密码来进行身份验证。通过用户名和密码认证,用户可以获得相应的权限,访问和管理Harbor镜像仓库。

③SSL加密通信:在与Harbor的通信过程中,可以通过SSL(Secure Sockets Layer)来加密通信,确保传输的数据在网络中的安全性。使用SSL证书可以建立安全的通信通道,防止敏感信息被窃取或篡改。

需要注意的是,SSL并不是一种认证方式,而是一种加密通信的方式。但它可以在认证过程中起到重要的作用,确保身份验证的过程和数据传输的过程都是安全的。

3.Harbor私有仓库的数据流向

  • 所有的请求或操作都会首先经过反向代理(proxy)处理。

  • 反向代理会将请求转发给后端的核心服务(core services)。

  • 核心服务包括UI、Token身份认证和Webhook等功能。

  • 请求经核心服务后,会被转发给镜像存储(registry)。对于需要下载镜像等权限操作,需要通过核心服务中的Token令牌进行身份验证。

  • 每一次下载和上传操作都会生成操作记录,并生成日志保存在数据库中。

  • 数据库中保存镜像元信息以及用户与组身份的信息。只有经过验证和授权的操作才会被允许。

4.Harbor.cfg配置文件参数详解

(1)所需参数 

这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:

  • hostname:用于访问用户界面和 register 服务,它应该是目标机器的 IP 地址或完全限定的域名(FQDN)。
  • 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 将被忽略。

  • 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私有仓库的搭建与部署

Harbor服务器 192.168.27.30 docker-ce、docker-compose、harbor-offline-v1.2.2
client服务器 192.168.27.40 docker-ce

1.部署Docker-Compose服务(192.168.27.30)

(1)下载或者上传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
故障排除1:

 下载docker-compose时出现“Failed connect to github.com:443; 拒绝连接”

解决方案:vim /etc/hosts

-添加

140.82.114.3 github.com
故障排除2:

再次下载时出现报错"curl: (35) Encountered end of file",排查发现是443端口没有开启

解决方案:

#开启防火墙
systemctl start firewalld
#放行443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
#重新加载防火墙
firewall-cmd --reload
#查看是否放行成功
firewall-cmd --zone=public --query-port=443/tcp

2.部署Harbor服务 (192.168.27.30)

(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/

(2)修改harbor安装的配置文件
 

vim /usr/local/harbor/harbor.cfg

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

3.启动Harbor(192.168.27.30)

cd /usr/local/harbor/

./prepare            #为harbor 启动的容器生成一些必要的文件(环境)
./install.sh         #以 pull 镜像启动容器
故障排除3: 

输入“./install.sh”时出现报错

查看原因是无法启用 SKIP DNAT 规则,并且指出 iptables 命令执行失败,因为找不到所需的链/目标/匹配。

解决方案:

重启docker

systemctl restart docker

 4.查看Harbor启动镜像(192.168.27.30)

cd /usr/local/harbor/
docker-compose ps

5.创建一个新项目(192.168.27.30)

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

Docker-Harbor私有仓库部署与管理_第2张图片

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

Docker-Harbor私有仓库部署与管理_第3张图片

③填写项目名称为“myproject-test”,点击“确定”按钮,创建新项目

Docker-Harbor私有仓库部署与管理_第4张图片

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

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

(1)登录Harbor

docker login [-u admin -p Harbor12345] http://127.0.0.1

(2)下载镜像测试

docker pull nginx

(3)给镜像打标签

格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/myproject-test/nginx:v1

(4)上传镜像到Harbor

docker push 127.0.0.1/myproject-test/nginx:v1

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

你可能感兴趣的:(docker,容器,运维)