欢迎您, 来到 宁时修博客.^_^

Docker系列--Docker企业级Registry服务器 Harbor

2018/12/03 林木立 Docker 876
Docker企业级Registry服务器 Harbor

一、Harbor简介

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。

    Harbor使用的是官方的docker registry(v2命名是distribution)服务去完成镜像的存储。Harbor在docker distribution的基础上增加了一些企业必需的功能特性,例如安全、标识、访问控制、管理、活动审计等功能以满足企业对于镜像仓库的需求。harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。

    Docker的registry是用本地存储或者AWS S3都是可以的,Harbor在此之上提供用户权限管理、镜像复制等功能,提高用户使用registry构建和运行环境传输镜像的的效率。    

    Harbor支持在多个Registry节点的镜像复制,Harbor的镜像复制功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。


    基于角色的访问控制:用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

    镜像复制:镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

    图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。

    AD/LDAP 支持:Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。

    审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

    国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

    RESTful API:RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。

    部署简单:提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。


二、Harbor主要组件

    Proxy:对应组件Nginx,是nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务。

    UI(Core Service):对应组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能: 

        UI:一个web管理页面;

        API:Harbor的API服务;

        Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现;

    Token服务:负责根据用户在每个project中的role来为每一个docker push/pull命令issuing一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token。

    Registry:对应组件docker registry,负责存储镜像文件,处理pull/push镜像,Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token。

    Admin Service:对应组件harbor-adminserver,是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置。

    Job Service:对应组件harbor-jobservice,负责镜像复制工作的,和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。

    Log Collector:对应组件harbor-log,帮助监控Harbor运行,通过docker的log-driver把其它组件的日志汇总到一起。

    Volnerability Scanning:对应组件Clair,负责镜像扫描。

    Notary:对应组件notary,负责镜像认证。

    DB:对应组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据。


三、Harbor实战

    Harbor 依赖docker,compose工具,需要提前安装好。docker 17.03.0-ce+ and docker-compose 1.10.0+ 。

    Harbor安装有两种方式,一种是offline(离线安装) ,一种是online(在线安装),离线安装需要下载的安装包较大,在线安装下载的安装包很小。

    Harbor官方安装和配置介绍:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md



    1、下载Harbor离线安装包

    Harbor版本下载:https://github.com/goharbor/harbor/releases

wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.2.tgz 
tar xf harbor-offline-installer-v1.6.2.tgz -C /usr/local/



    2、配置harbor.cfg

cd /usr/local/harbor/
cp harbor.cfg harbor.cfg.bak

vim harbor.cfg
hostname = 192.168.184.124
# 只是测试,所以改这一行就行了,其它配置项根据实际情况修改。


    3、执行安装脚本

    拉取几个镜像,及检查环境。

./install.sh


    4、使用docker-compose来管理Harbor的生命周期

    需要进入harbor安装目录:

[root@web harbor]# pwd
/usr/local/harbor
[root@web harbor]# docker-compose ps
       Name                     Command                  State                                    Ports                              
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
harbor-log           /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                       
harbor-ui            /harbor/start.sh                 Up (healthy)                                                                   
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp
    docker-compose stop  停止容器
    docker-compose start 启动容器
    docker-compose down  删除容器,利用./install.sh可以重新安装




    5、访问WEB 界面

    到此便安装完成了,直接打开浏览器访问 http://192.168.184.124  即可:

    默认用户密码是:admin/Harbor12345

 1631.png



四、使用Harbor上传、下载镜像

    1、新建项目

        用于存放镜像。

        项目-->新建项目-->输入项目名和设置访问级别。

9.png

    如果勾选了 "公开" 则所有人都可以读取,不勾选为私有项目,只有登陆了相关用户才可以操作。


    2、新建项目用户

    用于添加、读取、删减等管理镜像操作。

    系统管理-->用户管理-->创建用户-->输入账户信息。

1.png


    3、将用户加入项目

    让用户对项目有相应的管理权限。

    项目-->项目名-->成员选项-->添加用户-->用户名和角色。

    项目管理员对项目拥有所有操作权限,push/pull/delete/复制策略等操作;开发人员只能push/pull;访客只能pull 。

424.png


    4、创建镜像并上传到私有仓库

    1)给镜像打标签

[root@docker ~]# docker tag mysql:5.7 192.168.184.124/test/mysql:5.7
[root@docker ~]# docker tag php:5.6.38-fpm 192.168.184.124/test/php:5.6.38-fpm


    2)登录Harbor,使用刚才创建的用户

[root@docker ~]# docker login 192.168.184.124
Username: test
Password: 
Error response from daemon: Get https://192.168.184.124/v2/: dial tcp 192.168.184.124:443: getsockopt: connection refused


    远程登录harbor报错,因为docker默认使用的是https连接,而harbor默认使用http连接,所以需要修改docker配置标志 insecure registry 不安全仓库的主机!这里没配置https,所以在需要登录harbor的docker宿主机上的 /etc/docker/daemon.json文件这么设置:

{
    "insecure-registries": [
      "192.168.184.124"
    ]
}

    然后重启docker:

systemctl daemon-reload
systemctl restart docker

    如果在harbor宿主机上,还需重启harbor容器,不然访问不了:

docker-compose stop
docker-compose start


    这样做了后,就可以远程登录harbor了:

[root@docker ~]# docker login 192.168.184.124  #登录Harbor
Username: test
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

Are you sure you want to proceed? [y/N] y
Login Succeeded
[root@docker ~]# docker logout 192.168.184.124  #退出Harbor
Removing login credentials for 192.168.184.124



    3)上传打标签的镜像

[root@docker ~]# docker push 192.168.184.124/test/mysql
The push refers to repository [192.168.184.124/test/mysql]
d6f2a9f32566: Pushed 
18237a291ea7: Pushed 
2bb024c19a93: Pushed 
f7cece6625fd: Pushed 
6ae996979161: Pushed 
3538e779fb28: Pushed 
cef03d1730e4: Pushed 
2039058a7b75: Pushed 
7332e314e51e: Pushed 
ebdd1217991d: Pushed 
237472299760: Pushed 
5.7: digest: sha256:4c339d817020c348b5e7455678c4a1ceeeb881bd6c2de0b60e15e2fc41cbc183 size: 2621
[root@docker ~]# docker push 192.168.184.124/test/php:5.6.38-fpm
The push refers to repository [192.168.184.124/test/php]
307269f97f3b: Pushed 
89227206c909: Pushed 
e585b15d9cdc: Pushed 
d2c2fdb70fbf: Pushed 
9e4072d6bb02: Pushed 
ec60d330390f: Pushed 
a4ace4ed0385: Pushed 
fd29e0f8792a: Pushed 
687dad24bb36: Pushed 
237472299760: Mounted from test/mysql 
5.6.38-fpm: digest: sha256:d5cd91200c8b075965f2df99c446390df76253efcf56914ca8b6ead988b002f3 size: 2410



    4)验证上传镜像

55.png

16.png


    镜像数据存放harbor宿主机/data/registry/docker/registry/v2/repositories/test下。

    日志路径:/var/log/harbor/。


五、多台Harbor复制

    原先搭建的Harbor在192.168.184.124,现在在192.168.184.36上搭建第二台Harbor。

    在http://192.168.184.124上操作:

    新建目标仓库,系统管理-->仓库管理-->新建目标

09.png

    然后新建复制规则,系统管理-->复制管理-->新建规则232.png

    镜像复制触发模式有:手动、即刻、定时

    这里选择即刻,即上传到http://192.168.184.124就复制去另一台Harbor。

    即刻复制选项:删除本地镜像同时也删除远程的镜像,我也勾上了。具体视情况而定。

    还可以将已将上传的现有镜像复制过去。

    点击复制规则,可以看复制日志,因为之前上传了两个镜像,所以显示了两条记录,复制现有的镜像到远程Harbor上。

QQ图片20181203202437.png

    

    另一台Harbor(192.168.184.36)上查看:

    2129.png




点赞
说说你的看法

所有评论: (0)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群