什么是harbor:
harbor是VMware公司开源的企业级docker registry项目,其目标是帮助用户迅速搭建一个企业级的docker registry服务。
harbor的优势:
字段 | 描述 |
---|---|
基于角色控制 | 用户和仓库都是基于项目进行组织的,用户在项目中可以拥有不同的权限 |
基于镜像的复制策略 | 镜像可以在多个harbor实例之间复制(同步),适用于负载平衡、高可用性、多数据中心、混合和多云的场景 |
支持LDAP/AD | harbor与现有的企业LDAP/AD集成,用于用户认证和管理 |
删除图像和收集垃圾 | 镜像可以删除、镜像占用的空间也可以回收 |
图形UI | 用户可以轻松地浏览、搜索镜像仓库以及对项目进行管理 |
审计 | 对存储库的所有操作都能进行记录 |
RESTful API | 提供可用于大多数管理操作的RESTful API,易于与外部系统集成。 |
harbor架构:
组件说明:
组件 | 说明 |
---|---|
proxy | harbor的registry、UI、token等服务通过一个前置反向代理统一接受浏览器和docker客户端的请求,并将请求转发个后端的不通服务 |
registry | 负责存储docker镜像并处理docker push/pull命令。由于要对用户进行访问控制,及不同用户对docker镜像有不同的读写权限,registry会指向一个token服务,强制用户的每次docker push/pull请求都要携带一个合法的token,registry会通过公钥对token进行解密验证 |
core services | 这是harbor的核心功能,主要提供一下服务:UI:图形化界面,帮助用户管理registry上的镜像并对用户进行授权。webhook:为了及时获取registry上镜像状态的变化情况,在registry上配置webhook,把状态变化传递给UI模块。token:负责根据用户权限给每个docker push/pull命令签发token。docker客户端向registry服务发起的请求如果不包含token,会被重定向,获得token后再重新向registry发起请求 |
database | 为core services提供数据库服务,负责存储用户权限、审计日志、docker镜像分组信息等数据。 |
log collector | 监控harbor运行,负责收集其他组件的log,供日后分析使用 |
安装部署:
# 部署harbor首先需要docker-compose环境以及docker环境
[root@localhost harbor] tar xf harbor-offline-installer-v2.0.5.tgz -C /usr/local/
[root@localhost harbor] cp -a harbor.yml.tmpl harbor.yml
[root@localhost harbor] vim harbor.yml
hostname: harbor.kcc.com # 注意不要写localhost和127.0.0.1
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /usr/local/harbor/cert/server.crt #OpenSSL 生成的证书
private_key: /usr/local/harbor/cert/server.key #OpenSSL 生成的秘钥
[root@localhost harbor] ./install.sh
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registryctl ... done
Creating registry ... done
Creating harbor-portal ... done
Creating redis ... done
Creating harbor-db ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----
# 看到出现此结果说明已经成功了
[root@localhost harbor]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp
harbor-jobservice /harbor/entrypoint.sh Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp
redis redis-server /etc/redis.conf Up (healthy) 6379/tcp
registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp
registryctl /home/harbor/start.sh Up (healthy)
# 确认一下服务是否启动完成
# 另外还需要把你的harbor配置文件里的域名添加到 不安全注册表因为不是权威证书机构颁发的证书都不承认
Insecure Registries:
harbor.kcc.com
127.0.0.0/8
[root@localhost harbor]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://l4lesu78.mirror.aliyuncs.com"],
"exec-opts":["native.cgroupdriver=systemd"],
"insecure-registries":["https://harbor.kcc.com"]
}
# 此时就可以访问UI界面的harbor
https://harbor.kcc.com
# 需要宿主机域名解析
# 或者直接访问ip也可以
#登录默认账号、密码:admin Harbor12345
#创建一个项目
#新建用户
#项目指定用户权限
#此时基本可以使用harbor仓库了
# 下载一个测试镜像
[root@localhost ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
e5d9363303dd: Pull complete
Digest: sha256:c5439d7db88ab5423999530349d327b04279ad3161d7596d2126dfb5b02bfd1f
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
# 登录harbor
[root@localhost ~]# docker login harbor.kcc.com
username:
password:
# 改一下busybox tag 标签并上传镜像
[root@localhost ~]# docker tag busybox:latest harbor.kcc.com/kcc/bbox:v1
[root@localhost ~]# docker push harbor.kcc.com/kcc/bbox:v1
The push refers to repository [harbor.kcc.com/kcc/bbox]
0064d0478d00: Pushed
v1: digest: sha256:0415f56ccc05526f2af5a7ae8654baec97d4a614f24736e8eef41a4591f08019 size: 527
# 验证harbor是否有镜像bbox:v1
#企业级镜像仓库搭建完成