目录
一 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是一个开源的容器镜像仓库管理工具,它专注于存储、分发和管理Docker镜像。作为一个云原生的解决方案,Harbor提供了安全性和可扩展性,使组织能够建立自己的私有镜像仓库。Harbor提供了用户身份验证、访问控制和镜像复制等功能,使用户能够更好地管理和控制镜像的存储和分发。通过Harbor,组织可以实现更高级别的镜像管理,确保镜像的安全性和可用性,同时提升开发和部署的效率。
学习Harbor将使你能够更好地管理和控制Docker镜像,提供更高级别的安全性和可控性,同时提升团队的协作和生产力。这对于任何使用Docker进行应用程序开发和部署的组织来说都是非常有价值的。
Harbor具有灵活的权限控制、镜像复制、LDAP/AD集成、图形化界面、审计管理和RESTful API等特性,提供了强大而便捷的镜像仓库管理功能。
扩展:LDAP和AD都是用于身份验证和访问控制的目录服务协议。
LDAP是一种轻量级的目录访问协议,常用于组织内部的用户认证和用户信息管理。它使用树状结构来组织和存储用户、组和其他目录对象的信息。LDAP提供了灵活的权限控制和查询功能,允许用户通过用户名和密码进行身份验证,并获取相关的用户属性信息。
AD是由微软开发的目录服务,是一种更为复杂和全面的目录服务解决方案。它不仅提供了身份验证、用户信息管理的功能,还包括了域名服务、安全策略、组策略、文件共享等多个方面的功能。AD在Windows环境中广泛应用,可以用于组织内部的用户认证、授权和资源管理。
Harbor 在架构上主要有 Proxy、Registry、Core services、Database、Log collector、Job services 六个组件。
① webhook: 负责网站的一些服务功能;;
②token:令牌 ,提供身份认证服务;
③UI: 显示可视化界面。
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并不是一种认证方式,而是一种加密通信的方式。但它可以在认证过程中起到重要的作用,确保身份验证的过程和数据传输的过程都是安全的。
所有的请求或操作都会首先经过反向代理(proxy)处理。
反向代理会将请求转发给后端的核心服务(core services)。
核心服务包括UI、Token身份认证和Webhook等功能。
请求经核心服务后,会被转发给镜像存储(registry)。对于需要下载镜像等权限操作,需要通过核心服务中的Token令牌进行身份验证。
每一次下载和上传操作都会生成操作记录,并生成日志保存在数据库中。
数据库中保存镜像元信息以及用户与组身份的信息。只有经过验证和授权的操作才会被允许。
这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。
Harbor服务器 | 192.168.27.30 | docker-ce、docker-compose、harbor-offline-v1.2.2 |
---|---|---|
client服务器 | 192.168.27.40 | docker-ce |
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
下载docker-compose时出现“Failed connect to github.com:443; 拒绝连接”
解决方案:vim /etc/hosts
-添加
140.82.114.3 github.com
再次下载时出现报错"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
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/
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.27.30
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345
cd /usr/local/harbor/
./prepare #为harbor 启动的容器生成一些必要的文件(环境)
./install.sh #以 pull 镜像启动容器
查看原因是无法启用 SKIP DNAT 规则,并且指出 iptables 命令执行失败,因为找不到所需的链/目标/匹配。
解决方案:
重启docker
systemctl restart docker
cd /usr/local/harbor/
docker-compose ps
①浏览器访问:http://192.168.27.30登录Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
②输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
③填写项目名称为“myproject-test”,点击“确定”按钮,创建新项目
④此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。
⑤在 Harbor 界面 myproject-test 目录下可看见此镜像及相关信息
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/myproject-test/nginx:v1
docker push 127.0.0.1/myproject-test/nginx:v1