赞
踩
目录
Harbor 是VMware公司开源的云本地 registry 仓库,有可视化的Web管理界面,可以方便的管理和
储存 Docker 镜像。Harbor 支持在多个仓库直接进行复制镜像,提供用户管理和访问控制和活动审
计。
Harbor被部署为多个Docker 容器,因此可以部署在任何支持Docker的Linux 发行版上。(registry
为其核心组件)。
Harbor比registry相比好处是:harbor 支持多种功能、图形化界面管理、多用户权限、角色管理机
制、安全机制。
服务端主机需要安装Python、 Docker 和Docker Compose。(web 环境支持的是PY语言,centos7
虚拟机自带Python)
◎基于角色控制:有管理员与普通用户,可赋权普通用户,比如只能上传和下载,可根据项目来进
行操作和管理;
◎基于镜像的复制策略:也与权限相关,比如有只一些用户与组才能对此项目进行相对应的操作;
◎支持LDAP/AD:域控制,比如南京去下载北京harbor;
私有仓库的镜像,两端打上局域网的地址,连接在一块,数据信息的传输通过一条隧道,会通
过两层加密,第一层为隧道加密,第二层为数据加密,安全可靠。
◎图像删除和垃圾收集:即回收站机制;
◎图形UI:具有统计功能,比如访问量与镜像^下载热度;
◎审计:日志,这里意义不大,主要还是借助于ELK;
◎RESTful API:定义Web 语言规范的格式,方便调用Harbor 的接口,也便于二次开发。

图中各组件解释
◎Proxy:通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端
不同的服务;
◎Registry:负责存储Docker镜像,并处理docker push/pull命令;
◎Core services:Harbor的核心功能,包括UI、webhook、token服务;
◎Database:为core services提供数据库服务;
◎Log collector:·负责收集其他组件的log,供日后进行分析。
图解:
所有的请求都经过proxy代理,proxy代理转发给Core services和Registry,其中Core services
包括UI界面、token令牌和webhook网页服务功能,Registry主要提供镜像存储功能。如果要进行下
载上传镜像,要经过token令牌验证然后从Registry获取或上传镜像,每一次下载或上传都会生成日
志记录,会记入Log collector,而用户身份权限及一些镜像语言信息会被存储在Database中。
注:这些组件都是以容器封装的方式,使用docker-compose编排管理完成的。registry是代码仓
库。
Harbor的配置文件是:/usr/local/harbor/harbor.cfg
关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
(1)所需参数
修改此参数后,需要运行 install.sh脚本重新安装 Harbour,参数才会生效。
◆ hostname
用于访问用户界面和 register 服务。
它应该是目标机器的 IP 地址或完全限定的域名(FQDN)
例如 192.168.163.100 或test.com。不要使用 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 时才应用。
◆ ssl_cert_key
SSL 密钥的路径,仅当协议设置为 https 时才应用。
◆ secretkey_path
用于在复制策略中加密或解密远程 register 密码的密钥路径。不建议配置,有很大的安全隐患
(2)可选参数
这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进
行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数 的更新,
Harbor.cfg 将被忽略。
注意:如果选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须
在注册或在 Harbor 中创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除了默认
的 admin 用户),auth_mode 不能被修改。具体参数如下:
Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。
请注意,在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS,
那么应该通过设置启用SSL email_ssl = TRUE。
◆ harbour_admin_password
管理员的初始密码,只在Harbour第一次启动时生效。之后,此设置将被忽略,并且应 UI中设置管
理员的密码。默认的用户名/密码是 admin/Harbor12345。
◆ auth_mode
使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请
将其设置为 ldap_auth。
◆ self_registration
启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在
Harbour中创建新用户。
注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽
略。
◆ Token_expiration
由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。即登录–退出后,30分钟内可以不
输入用户名和密码登录,30分钟后需要再次验证。
◆ project_creation_restriction
用于控制哪些用户有权创建项目的标志,表示哪些用户可以创建项目。默认情况下, 每个人都可
以创建一个项目。如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。
◆ verify_remote_cert
打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证
书。将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使
用。
另外,默认情况下,Harbour 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他
存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等。但需要更新
common/templates/registry/config.yml 文件。
#部署环境确认
#准备harbor安装包harbor-offline-installer-v1.2.2.tgz
wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
#准备docker-compose安装包docker-compose
- [root@docker ~]# ls #上传压缩包
- anaconda-ks.cfg original-ks.cfg 模板 图片 下载 桌面
- harbor-offline-installer-v1.2.2.tgz 公共 视频 文档 音乐
- [root@docker ~]# tar -zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
- [root@docker ~]# vim /usr/local/harbor/harbor.cfg
-
- ……
- hostname = 192.168.110.133 #主机名修改为本机IP地址
- ……
- [root@docker ~]# cd /usr/local/bin/ #在此目录下上传Docker-Compose二进制文件
- [root@docker bin]# ls #此时这个文件只有读取权限
- docker-compose
- [root@docker bin]# chmod +x docker-compose #给此文件执行权限
- [root@docker bin]# ll
- -rwxr-xr-x 1 root root 10867152 12æ 3 09:34 docker-compose
- [root@docker bin]# docker-compose -v #确认docker-compose版本,是否安装成功
- docker-compose version 1.21.1, build 5a3f1a3
- [root@docker bin]# #注意:在启动harbor之前,要检查docker和docker-compose是否安装,不安装是无法启动的


- [root@docker ~]# sh /usr/local/harbor/install.sh #修改配置文件后,使用install.sh脚本启动haibor
-
- [Step 0]: checking installation environment ...
-
- Note: docker version: 20.10.11
-
- Note: docker-compose version: 1.21.1
-
- [Step 1]: loading Harbor images ... #启动harbor后,会自动下载相关镜像并运行成容器
- dd60b611baaa: Loading layer 133.2MB/133.2MB
- abf0579c40fd: Loading layer 1.536kB/1.536kB
- ea1fc7bed9c5: Loading layer 22.48MB/22.48MB
- 1d6671367c69: Loading layer 7.168kB/7.168kB
- ……
- [root@docker ~]# docker ps -a #查看harbor启动容器和镜像
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 17c82f2024e1 vmware/nginx-photon:1.11.13 "nginx -g 'daemon of…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:4443->4443/tcp, :::4443->4443/tcp nginx
- 8d4f72a2b938 vmware/harbor-jobservice:v1.2.2 "/harbor/harbor_jobs…" 5 minutes ago Up 5 minutes harbor-jobservice
- b65dd14d17ad vmware/harbor-ui:v1.2.2 "/harbor/harbor_ui" 5 minutes ago Up 5 minutes harbor-ui
- 84bf5c9c040b vmware/registry:2.6.2-photon "/entrypoint.sh serv…" 5 minutes ago Up 5 minutes 5000/tcp registry
- 60bc7f99c8d4 vmware/harbor-db:v1.2.2 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 3306/tcp harbor-db
- 660e2853d851 vmware/harbor-adminserver:v1.2.2 "/harbor/harbor_admi…" 5 minutes ago Up 5 minutes harbor-adminserver
- 13868c6a194b vmware/harbor-log:v1.2.2 "/bin/sh -c 'crond &…" 5 minutes ago Up 5 minutes 127.0.0.1:1514->514/tcp harbor-log
- [root@docker ~]# docker images #查看镜像,可以看到harbor自己将需求的镜像都下载了如photon环境,db数据库和ui界面等
- vmware/harbor-log v1.2.2 36ef78ae27df 4 years ago 200MB
- vmware/harbor-jobservice v1.2.2 e2af366cba44 4 years ago 164MB
- vmware/harbor-ui v1.2.2 39efb472c253 4 years ago 178MB
- vmware/harbor-adminserver v1.2.2 c75963ec543f 4 years ago 142MB
- vmware/harbor-db v1.2.2 ee7b9fa37c5d 4 years ago 329MB
- vmware/nginx-photon 1.11.13 6cc5c831fc7f 4 years ago 144MB
- vmware/registry 2.6.2-photon 5d9100e4350e 4 years ago 173MB
- vmware/postgresql 9.6.4-photon c562762cbd12 4 years ago 225MB
- vmware/clair v2.0.1-photon f04966b4af6c 4 years ago 297MB
- vmware/harbor-notary-db mariadb-10.1.10 64ed814665c6 4 years ago 324MB
- vmware/notary-photon signer-0.5.0 b1eda7d10640 4 years ago 156MB
- vmware/notary-photon server-0.5.0 6e2646682e3c 4 years ago 157MB
- photon 1.0 e6e4e4a2ba1b 5 years ago 128MB
- progrium/stress latest db646a8f4087 7 years ago 282MB
- [root@docker ~]#

- [root@docker ~]# cd /usr/local/harbor/ #注意切换到harbor工作目录,此目录下需要使用docker-compose.yml文件
- [root@docker harbor]# docker-compose ps #在有上述这个文件第目录下才能使用此查询清单命令,检测当前应用的容器是否正常
- Name Command State Ports
- ---------------------------------------------------------------------------------------------------
- harbor-adminserver /harbor/harbor_adminserver Up
- harbor-db docker-entrypoint.sh mysqld Up 3306/tcp
- harbor-jobservice /harbor/harbor_jobservice Up
- harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp
- harbor-ui /harbor/harbor_ui Up
- nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp,:::443->443/tcp,
- 0.0.0.0:4443->4443/tcp,:::4443->4443/
- tcp, 0.0.0.0:80->80/tcp,:::80->80/tcp
- registry /entrypoint.sh serve /etc/ ... Up 5000/tcp
- [root@docker harbor]#
宿主机浏览器访问 http://192.168.110.133 的管理页面,默认的管理员用户名和密码是
admin/Harbor12345。

添加项目并且填写项目名称



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


①、现在,本地harbor服务器端,我们将镜像上传到私有仓库进行测试
- [root@docker .docker]# docker pull nginx #
- [root@docker .docker]# docker tag nginx 127.0.0.1/test/centos:nginx_v1 #打包,并打标签
- [root@docker .docker]# docker push 127.0.0.1/test/centos:nginx_v1 #上传到私有仓库
- The push refers to repository [127.0.0.1/test/centos]
- 2bed47a66c07: Pushed
- 82caad489ad7: Pushed
- d3e1dca44e82: Pushed
- c9fcd9c6ced8: Pushed
- 0664b7821b60: Pushed
- 9321ff862abb: Pushed
- nginx_v1: digest: sha256:4424e31f2c366108433ecca7890ad527b243361577180dfd9a5bb36e828abf47 size: 1570
- ……
接着在浏览器harbor的ui界面查看

②、在客户端上传镜像进行验证
client:192.168.110.134 #注意客户端安装docker社区版,并且设置镜像加速
上述操作都是在 Harbor 服务器本地操作。如果其他客户端上传镜像到 Harbor,就会报如下错误。
出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是
HTTP 服务,所以与私有镜像交互时出现以下错误。
- #我们直接登录会报错,如下
- [root@client ~]# docker login -u admin -p Harbor12345 http://192.168.110.133
- WARNING! Using --password via the CLI is insecure. Use --password-stdin.
- INFO[0000] Error logging in to endpoint, trying next endpoint error="Get \"https://192.168.110.133/v2/\": dial tcp 192.168.110.133:443: connect: connection refused"
- Get "https://192.168.110.133/v2/": dial tcp 192.168.110.133:443: connect: connection refused
- [root@client ~]# #解决方法如下
-
-
- [root@client ~]# vim /usr/lib/systemd/system/docker.service
- #修改内容地方
- ......
- 将ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改为
- ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.110.133 --containerd=/run/containerd/containerd.sock
- ......
-
- #重启服务
- [root@client ~]# systemctl daemon-reload
- [root@client ~]# systemctl restart docker
-
- #再次登录
- [root@client ~]# docker login -u admin -p Harbor12345 http://192.168.110.133
- WARNING! Using --password via the CLI is insecure. Use --password-stdin.
- WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
- Configure a credential helper to remove this warning. See
- https://docs.docker.com/engine/reference/commandline/login/#credentials-store
-
- Login Succeeded
- [root@client ~]# #注意上面都是警告,看到结尾Login Succeeded表示成功登陆
- [root@client ~]# docker pull tomcat
- [root@client ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- tomcat latest 49842ef82091 42 hours ago 680MB
- [root@client ~]# docker tag tomcat 192.168.110.133/test/centos:tomcat_v1
- [root@client ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 192.168.110.133/test/centos tomcat_v1 49842ef82091 43 hours ago 680MB
- tomcat latest 49842ef82091 43 hours ago 680MB
- [root@client ~]# docker push 192.168.110.133/test/centos:tomcat_v1
- The push refers to repository [192.168.110.133/test/centos]
- 009f006c5c51: Pushed
- 2618b7cbd2f1: Pushed
- f79d29235239: Pushed
- 5c81f9330d99: Pushed
- 927f9fcef4cf: Pushed
- a81f1846a0d2: Pushed
- 3b441d7cb46b: Pushed
- d3710de04cb3: Pushed
- 91f7336bbfff: Pushed
- e2e8c39e0f77: Pushed
- tomcat_v1: digest: sha256:7035e09ef67377cc4275cae24a2912de34e6bfb590ea214dc27f6ffc2498cd70 size: 2422
- [root@client ~]#

下面,我们回到harbor项目查看client端上传到项目test的镜像

可以使用 docker-compose 来管理 Harbor。一些有用的命令如下所示,必须在与docker-
compose.yml 相同的目录中运行。
修改 Harbor.cfg 配置文件。要更改 Harbour 的配置文件时,请先停止现有的 Harbour 实例并更新
Harbor.cfg;然后运行 prepare 脚本来填充配置;最后重新创建并启动 Harbour 的实例。
- # 停止现有的 Harbor 实例
- cd /usr/local/harbor/
- docker-compose down -v
-
- #编辑配置文件/usr/local/harbor/harbor.cfg
- vim harbor.cfg #停止后才可以修改配置文件
- ……
- ostname = 192.168.110.133
- # 运行prepare脚本来填充配置
- ./prepare
-
- #重新启动Harbor
- docker-compose up -d
-
- #如果报错
- 解决思路
- 关闭防火墙、重启docker
- systemctl stop firewalld
- setenfore 0
- systemctl restart docker

在haarbor的ui界面用户管理选项创建

创建的新用户设置为管理员

创建项目管理人员或开发人员


我们在在客户端上操作,测试新创建管理员用户是否能正常使用
- [root@client ~]# docker logout 192.168.110.133 #注销之前的登录用户
- Removing login credentials for 192.168.110.133
- [root@client ~]# docker login 192.168.110.133 #重新登陆,使用新用户
- Username: zhangsan #输入用户名
- Password: #输入密码
- WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
- Configure a credential helper to remove this warning. See
- https://docs.docker.com/engine/reference/commandline/login/#credentials-store
-
- Login Succeeded #成功登陆
- [root@client ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- 192.168.110.133/test/centos tomcat_v1 49842ef82091 44 hours ago 680MB
- tomcat latest 49842ef82091 44 hours ago 680MB
- [root@client ~]# docker rmi 192.168.110.133/test/centos:tomcat_v1 #删除之前打标签的镜像
- Untagged: 192.168.110.133/test/centos:tomcat_v1
- Untagged: 192.168.110.133/test/centos@sha256:7035e09ef67377cc4275cae24a2912de34e6bfb590ea214dc27f6ffc2498cd70
- [root@client ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- tomcat latest 49842ef82091 44 hours ago 680MB
- [root@client ~]# docker pull 192.168.110.133/test/centos:nginx_v1 #从私有仓库下载镜像
- nginx_v1: Pulling from test/centos
- e5ae68f74026: Pull complete
- 21e0df283cd6: Pull complete
- ed835de16acd: Pull complete
- 881ff011f1c9: Pull complete
- 77700c52c969: Pull complete
- 44be98c0fab6: Pull complete
- Digest: sha256:4424e31f2c366108433ecca7890ad527b243361577180dfd9a5bb36e828abf47
- Status: Downloaded newer image for 192.168.110.133/test/centos:nginx_v1
- 192.168.110.133/test/centos:nginx_v1
- [root@client ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- tomcat latest 49842ef82091 44 hours ago 680MB
- 192.168.110.133/test/centos nginx_v1 f652ca386ed1 2 days ago 141MB
- [root@client ~]# #成功下载镜像,zhangsan用户可以管理test仓库镜像

在Harbor服务器上操作,移除 Harbor 服务容器同时保留镜像数据/数据库。
- cd /usr/local/harbor/
- docker-compose down -v
- 如需重新部署,需要移除 Harbor 服务容器全部数据
- 持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下。
- rm -rf /data/database/
- rm -rf /data/registry/
- #实际操作如下
- [root@docker ~]# cd /usr/local/harbor/
- [root@docker harbor]# ls
- common docker-compose.yml harbor.v1.2.2.tar.gz NOTICE
- docker-compose.clair.yml harbor_1_1_0_template install.sh prepare
- docker-compose.notary.yml harbor.cfg LICENSE upgrade
- [root@docker harbor]# docker-compose down -v #停止启动的harbor容器
- Stopping nginx ... done
- Stopping harbor-jobservice ... done
- Stopping harbor-ui ... done
- Stopping harbor-db ... done
- Stopping registry ... done
- Stopping harbor-adminserver ... done
- Stopping harbor-log ... done
- Removing nginx ... done
- Removing harbor-jobservice ... done
- Removing harbor-ui ... done
- Removing harbor-db ... done
- Removing registry ... done
- Removing harbor-adminserver ... done
- Removing harbor-log ... done
- Removing network harbor_harbor
- [root@docker harbor]# docker ps -a #没了
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- [root@docker harbor]# ls /data/registry/docker/registry/v2/repositories/test/
- #可以看到harbor私有仓库版本还有我们创建的项目test,以及上传的镜像都在这里
- centos
- [root@docker harbor]# rm -rf /data/database/
- [root@docker harbor]# rm -rf /data/registry/
- #删除这两个目录后,就清除了harber服务的全部数据,现在就可以重新部署了

1、docker-harbor镜像仓库:是本地私有镜像仓库,用于保存项目/企业/平台内部经常使用的镜像/自定义的镜像,用于给docker/k8s使用
2、docker-harbor服务有多个子功能模块组成,例如:UI、Nginx、MySQL、Proxy、Registry、Adminserver、Jobserver、Docker-harbor使用docker-compose的方式将以上的子功能模块以容器的形式部署/展现出来,并且进行统一的编排管理。
3、docker-compose编排管理容器:(1)docker-compose可以定义镜像拉取的方式(①docker-hub公共仓库拉取;②dockerfile自定义构建镜像);(2)docker-compose可以指定镜像的挂载、镜像中服务的端口暴露、可以指定network网络、可以指定env环境变量、可以指定重启策略等等。PS:docker-compose就是用来批量管理镜像、容器的一个技术。
4、docker-harbor使用:(1)tar解压;(2)上传docker-compose命令工具,给与执行权限;(3)执行install.sh脚本;(4)在docker的systemd管理服务的docker.sevice启动文件中,添加insecure-registry 192.168.32.15(harbor仓库位置)并且重载守护进程systemctl daemon-reload和重启容器docker restart docker让本地的docker可以识别并登陆本地私有仓库(docker login);(5)上传镜像必要操作:docker tag source_image_name:tag 192.168.32.15/proiect_name/image_name:TAG,再docker push 192.168.32.15/project_name/image_name:TAG
5、harbor-UI界面操作:(1)可以进行用户/角色的创建和权限管理;(2)认证管理:数据库/ldap;(3)镜像操作日志管理;(4)token令牌管理
6、harbor(高可用);认证(CA、LDAP);备份
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。