如何快速利用Harbor搭建本身的企业级registry server?

小贴士

Harbor是由VMware团队为企业用户设计的Registry Server开源项目,用户能够利用Harbor搭建本身的私有镜像仓库。即便你是harbor小白,也能够从本文快速从认识Harbor到利用Harbor搭建本身的企业级registry server。
 mysql

Harbor特性

  • 基于角色控制
    用户和仓库都是基于项目进行组织的, 而用户基于项目能够拥有不一样的权限。
  • 基于镜像的复制策略
    镜像能够在多个Harbor实例之间进行复制。
  • 支持LDAP
    Harbor的用户受权可使用已经存在LDAP用户。
  • 镜像删除 & 垃圾回收
    Image能够被删除而且回收Image占用的空间。
  • 用户UI
    用户能够轻松的浏览、搜索镜像仓库以及对项目进行管理。
  • 镜像删除 & 垃圾回收
    绝大部分的用户操做API, 方便用户对系统进行扩展。
  • 轻松的部署功能
    Harbor提供了online、offline安装,除此以外还提供了virtual appliance安装。

 

Harbor和docker registry关系

Harbor实质上是对docker registry作了封装,扩展了本身的业务模块.下面展现一下docker registry和Harbor的架构图用以说明。
 nginx

微信截图_20161228145642.png



Harbor认证过程
一、docker daemon从docker registry拉取镜像。

二、若是docker registry须要进行受权时,registry将会返回401 Unauthorized响应,同时在响应中包含了docker client如何进行认证的信息。

三、docker client根据registry返回的信息,向auth server发送请求获取认证token。

四、auth server则根据本身的业务实现去验证提交的用户信息是否存符合业务要求。

五、用户数据仓库返回用户的相关信息。

六、auth server将会根据查询的用户信息,生成token令牌,以及当前用户所具备的相关权限信息 。上述就是完整的受权过程.当用户完成上述过程之后即可以执行相关的pull push操做。认证信息会每次都带在请求头中。

Harbor总体架构web

微信截图_20161228145741.png



Harbor认证流程sql

微信截图_20161228145750.png



A、首先,请求被代理容器监听拦截,并跳转到指定的认证服务器。

B、 若是认证服务器配置了权限认证,则会返回401。通知docker client在特定的请求中须要带上一个合法的token。而认证的逻辑地址则指向架构图中的core services。

C、 当docker client接受到错误code。client就会发送认证请求(带有用户名和密码)到core services进行basic auth认证。

D、 当C的请求发送给ngnix之后,ngnix会根据配置的认证地址将带有用户名和密码的请求发送到core serivces。

E、 core services获取用户名和密码之后对用户信息进行认证(本身的数据库或者介入LDAP均可以)。成功之后,返回认证成功的信息。

从上面的docker registry 和 Harbor的架构图、流程图能够看出Harbor的扩展部分为core services。这部分实现了用户的认证, 添加了UI模块已经webhook。
 docker

Harbor安装

Harbor安装有三种方式,这里以online的方式为例,另外两种有兴趣的童鞋能够参考Harbor的官方文档。

Harbor的安装

一、下载安装包
二、配置harbor.cfg文件
三、执行install.sh脚本安装并启动Harbor

用户能够到release页下载相关文件,解压tar xvf harbor-online-installer-<version>.tgz。

Harbor配置数据库

  • hostname 运行Harbor的主机地址(域名或者IP地址 不能是localhost or 127.0.0.1。
  • ui_url_protocol url协议(http或者htpps) https配置能够参考 Configuring Harbor with HTTPS Access。
  • Email设定 配置的邮件能够用户Harbor进行密码重置处理。


e.g:
email_server =smtp.mydomain.com
email_server_port = 25
email_username=ample_admin@mydomain.com
email_password = abc
email_from = admin sample_admin@mydomain.com
email_ssl = falseswift

  • harbor_admin_password admin初始化密码。
  • auth_mode 认证方式,默认为db_auth。也可使用ldap_auth 因为参数太多就不一一列举了。 Harbor安装手册讲的很清楚。

 

storage配置

默认状况下,Harbor是把镜像存储在本地文件系统中的。可是在生成环境中你可能会考虑到使用其余的存储方案来代替本地存储。好比S三、Openstack Swift、Ceph等等。那么这个时候你就须要更改templates/registry/config.yml中的存储配置部分。例如:

storage:
swift:

username: admin

password: ADMIN_PASS

authurl: http://keystone_addr:35357/v3/auth
tenant: admin

domain: default

region: regionOne

container: docker_images

详细配置能够参考Registry Configuration Reference

完成安装并启动

sudo ./install.sh

登陆并建立本身的首个仓库试试(初始用户名/密码 admin/Harbor12345)

$docker login reg.yourdomain.com
$dockerpushreg.yourdomain.com/myproject/myrepo:mytag

Harbor的生命周期管理 你可使用docker-compose来管理Harbor的生命周期,下面列举一些有用的经常使用的命令。

Stop Harbor:

$ sudo docker-compose stop
Stopping harbor_proxy_1 ... done
Stopping harbor_ui_1 ... done
Stopping harbor_registry_1 ... done
Stopping harbor_mysql_1 ... done
Stopping harbor_log_1 ... done
Stopping harbor_jobservice_1 ... done

Restart Harbor after stopping:

$ sudo docker-compose start
Starting harbor_log_1
Starting harbor_mysql_1
Starting harbor_registry_1
Starting harbor_ui_1
Starting harbor_proxy_1
Starting harbor_jobservice_1

移除docker container 可是保留相关镜像文件

sudo docker-compose rm
Going to remove harbor_proxy_1, harbor_ui_1, harbor_registry_1, harbor_mysql_1, harbor_log_1, harbor_jobservice_1
Are you sure? [yN] y
Removing harbor_proxy_1 ... done
Removing harbor_ui_1 ... done
Removing harbor_registry_1 ... done
Removing harbor_mysql_1 ... done
Removing harbor_log_1 ... done
Removing harbor_jobservice_1 ... done

详细信息能够参考Docker Compose command-line reference

持久化data和日志文件 默认状况下data是被存储在Harbor host机的/data目录.无论harbor container是删除仍是从新建立这里的数据都是一致存在的。另外harbor的日志文件默认状况下是存在/var/log/harbor/目录下的。
自定义ngnix监听端口 修改docker-compose.yml文件。
一、替换80端口为任意存在未被占用的端口 e.g 8899

proxy:

image: library/nginx:1.11.5
restart: always

volumes:
- ./config/nginx:/etc/nginx

ports:
- 8899:80
- 443:443
depends_on:
- mysql
- registry
- ui
- log

logging:

driver: "syslog"
options:

syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"

二、修改templates/registry/config.yml文件

auth:

token:
issuer: registry-token-issuer
realm: $ui_url:8899/service/token
rootcertbundle: /etc/registry/root.crt
service: token-service
三、运行install.sh来更新并启动Harbor

$ sudo docker-compose down
$ sudo install.sh

HTTPS 协议的修改和自定义监听端口修改同样的操做

Wise2C ∣一个有用的公众号
 服务器

a9bf2b2.jpg

相关文章
相关标签/搜索