Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
Harbor的特征介绍
基于角色的访问控制
用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制
镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
图形化用户界面
用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
AD/LDAP 支持
Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化
已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
RESTful API
RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
部署简单
提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式)虚拟设备。
在此使用harbor替换了官方的registry,配置地址为docker-registy.hexun.com,通过api对获取版本,实现了版本回退机制,后续会有说明
如果详细链接请移步本博客的关于harbor的文章:http://www.52devops.com/chuck/1319.html
2、环境、软件准备
本次演示环境,我是在虚拟机Linux Centos7上操作,以下是安装的软件及版本:
Docker:version 1.12.6
Docker-compose: version1.13.0
Harbor: version 1.1.2
注意:Harbor的所有服务组件都是在Docker中部署的,所以官方安装使用Docker-compose快速部署,所以我们需要安装Docker、Docker-compose。由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。
1)Docker 安装
官网安装 Docker for CentOS
yum安装 yum install docker
2) Docker-compose 安装
安装docker-compose的两种方式
这里简单介绍下两种安装docker-compose的方式,第一种方式相对简单,但是由于网络问题,常常安装不上,并且经常会断开,第二种方式略微麻烦,但是安装过程比较稳定
方法一:
# curl -Lhttps://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname-s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
查看版本信息
# docker-compose --version
但是此方法会经常因为网络的原因而无法安装
方法二:
1、安装python-pip
yum -y install epel-release
yum -y install python-pip
2、安装docker-compose
pip install docker-compose
待安装完成后,执行查询版本的命令,即可安装docker-compose
docker-compose version
3、Harbor 服务搭建
1)下载Harbor安装文件
从 github harbor 官网 release 页面下载指定版本的安装包。
1、在线安装包
$ wgethttps://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz
$tar xvf harbor-online-installer-v1.1.2.tgz
2、离线安装包
$wgethttps://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
$tar xvf harbor-offline-installer-v1.1.2.tgz
2)配置Harbor
解压缩之后,目录下回生成harbor.conf文件,该文件就是Harbor的配置文件。
## Configuration file of Harbor
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname = 192.168.26.159
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
# mysql数据库root用户默认密码root123,实际使用时修改下
db_password = root123
max_job_workers = 3
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA
# 邮件设置,发送重置密码邮件时使用
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = [email protected]
email_password = abc
email_from = admin
email_ssl = false
# 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
auth_mode = db_auth
# LDAP认证时配置项
#ldap_url = ldaps://ldap.mydomain.com
#ldap_searchdn =uid=searchuser,ou=people,dc=mydomain,dc=com
#ldap_search_pwd = password
#ldap_basedn = ou=people,dc=mydomain,dc=com
#ldap_filter = (objectClass=person)
#ldap_uid = uid
#ldap_scope = 3
#ldap_timeout = 5
# 是否开启自注册
self_registration = on
# Token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
project_creation_restriction = everyone
verify_remote_cert = on
3)启动 Harbor
修改完配置文件后,在的当前目录执行./install.sh,Harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动各个服务,Harbor依赖的镜像及启动服务如下:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vmware/harbor-jobservice v1.1.2 ac332f9bd31c 10 days ago 162.9 MB
vmware/harbor-ui v1.1.2 803897be484a 10 days ago 182.9 MB
vmware/harbor-adminserver v1.1.2 360b214594e7 10 days ago 141.6 MB
vmware/harbor-db v1.1.2 6f71ee20fe0c 10 days ago 328.5 MB
vmware/registry 2.6.1-photon 0f6c96580032 4 weeks ago 150.3 MB
vmware/harbor-notary-db mariadb-10.1.10 64ed814665c6 10 weeks ago 324.1 MB
vmware/nginx 1.11.5-patched 8ddadb143133 10 weeks ago 199.2 MB
vmware/notary-photon signer-0.5.0 b1eda7d10640 11 weeks ago 155.7 MB
vmware/notary-photon server-0.5.0 6e2646682e3c 3 months ago 156.9 MB
vmware/harbor-log v1.1.2 9c46a7b5e517 4 months ago 192.4 MB
photon 1.0 e6e4e4a2ba1b 11 months ago 127.5 MB
# 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,0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
registry /entrypoint.sh serve /etc/... Up 5000/tcp
启动完成后,我们访问刚设置的hostname即可 http://10.236.63.76/,默认是80端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射。
1、admin登录
$ docker login 192.168.26.159
Username: admin
Password:
Login Succeeded
(免密钥远程登陆输入:
$docker login -u admin -p Harbor12345 192.168.26.159)
2、给镜像打tag
$ docker tag nginx 192.168.26.159/wanyang/nginx:latest
$ vi /etc/sysconfig/docker
OPTIONS='--selinux-enabled–insecure-registry 192.168.26.159'
$ systemctlrestart docker
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 958a7ae9e569 2 weeks ago 109 MB
192.168.26.159/wanyang/nginx latest 958a7ae9e569 2 weeks ago 109 MB
3、push到仓库
$ docker push 192.168.26.159/wanyang/nginx
The push refers to a repository [192.168.26.159/wanyang/nginx]
a552ca691e49: Pushed
7487bf0353a7: Pushed
8781ec54ba04: Pushed
latest: digest:sha256:41ad9967ea448d7c2b203c699b429abe1ed5af331cd92533900c6d77490e0268 size: 948
Run the below commands on the host whichHarbor is deployed on to preview what files/images will be affected:
官方已经说的很明白了,第一个run是只打印出来已删除镜像,但不进行空间释放和垃圾回收,执行下面的一个run,成功释放空间了。
$ docker-compose stop
$ docker run -it --name gc --rm--volumes-from registry vmware/registry:2.6.2-photon garbage-collect /etc/registry/config.yml
$ docker-compose start
执行垃圾回收命令
docker run -it --name gc --rm--volumes-from registry vmware/registry:2.6.2-photon garbage-collect /etc/registry/config.yml 自行参照镜像名称修改
查看空间是否释放
$ du -sh