简介Harbor是VMware公司最近开源的企业级Docker Registry项目,项目地址为https://github.com/vmware/harbor 其目标是帮助用户迅速搭建一个企业级的D
简介
Harbor是VMware公司最近开源的企业级Docker Registry项目,项目地址为https://github.com/vmware/harbor 其目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以Docker容器的形式构建的,使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 /Deployer/docker-compose.yml,由5个容器组成:
- Proxy: 由Nginx 服务器构成的反向代理。
- Registry:由Docker官方的开源registry 镜像构成的容器实例。
- UI: 即架构中的core services, 构成此容器的代码是Harbor项目的主体。
- Mysql: 由官方MySql镜像构成的数据库容器。
- Log: 运行着rsyslogd的容器,通过log-driver的形式收集其他容器的日志。这几个容器通过Docker link的形式连接在一起,在容器之间通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
安装
安装条件
Harbor 部署为几个Docker容器,因此可以部署在任何支持Docker的Linux发行版上。目标主机需要安装Python,Docker和Docker Compose。
- Python应该是2.7或更高版本。请注意,您可能必须在Linux发行版(Gentoo,Arch)上安装Python,该版本不附带默认安装的Python解释器(2017.6.9补充:Python3 版本会报错,请用2.7版本)
- Docker引擎应为1.10或更高版本。有关安装说明,请参阅:https://docs.docker.com/engine/installation/
- Docker Compose需要为1.6.0或更高版本。有关安装说明,请参阅:https://docs.docker.com/compose/install/
安装步骤
安装步骤如下
- 下载安装程序
- 配置ports.cfg
- 运行install.sh来安装和启动Harbor
下载安装程序:
可以从https://github.com/vmware/harbor/releases 面下载安装程序的二进制文件。选择在线或离线安装程序。使用tar命令来提取包。
因为项目在git上,有墙且离线文件比较大,如果宿主机中Docker配置了加速器,可以使用在线安装会比较快
在线安装:
$ tar xvf harbor-online-installer-<version>.tgz
离线安装:
$ tar xvf harbor-offline-installer-<version>.tgz
配置文件
配置参数位于文件harbor.cfg中。
在ports.cfg中有两类参数,必需参数和可选参数。
- 必需参数:需要在配置文件中设置这些参数。如果用户更新它们harbor.cfg并运行install.sh脚本以重新安装Harbor,它们将生效。
- 可选参数:这些参数是可选的。如果他们 配置到harbor.cfg,他们只能在首次启动Harbor 生效。这些参数的后续更新harbor.cfg将被忽略。海港启动后,用户可以将其留空,并在Web UI上进行更新。注意:如果您选择通过用户界面设置这些参数,请务必在Harbour启动后立即进行。特别地,您必须在注册或创建任何新的用户之前设置所需的auth_mode。当系统中有用户(默认管理员用户除外)时, 无法更改auth_mode。
参数如下所述 – 请注意,至少需要更改hostname属性。
必需参数:
- hostname:目标主机的主机名,用于访问UI和注册表服务。它应该是目标机器的IP地址或完全限定域名(FQDN),例如192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1为主机名 – 注册表服务需要外部客户端访问!
- ui_url_protocol:(http或https。默认为http)用于访问UI和令牌/通知服务的协议。如果启用公证,则此参数必须为https。默认情况下,这是http。要设置https协议,请参阅使用HTTPS访问harbor。
- db_password:用于db_auth的MySQL数据库的根密码。更改此密码以供任何生产用途!
- max_job_workers:(默认值为3)作业服务中的最大复制工作数。对于每个映像复制作业,工作程序将存储库的所有标签同步到远程目标。增加此数字允许系统中更多的并发复制作业。但是,由于每个工作人员都会消耗一定数量的网络/ CPU / IO资源,请根据主机硬件资源选择该属性的值。
- customize_crt:(打开或关闭,默认为打开)当此属性打开时,准备脚本将为注册表令牌的生成/验证创建私钥和根证书。当密钥和根证书由外部源提供时,将此属性设置为off。有关详细信息,请参阅自定义密钥和harbor令牌服务证书。
- ssl_cert:SSL证书的路径,仅当协议设置为https时才应用
- ssl_cert_key:SSL密钥的路径,仅当协议设置为https时才应用
- secretkey_path:用于在复制策略中加密或解密远程注册表的密码的密钥路径。
可选参数
- 电子邮件设置:Harbor需要这些参数才能向用户发送“密码重设”电子邮件,只有在需要该功能时才需要这些参数。另外,请注意,在默认情况下SSL连接时没有启用-如果你的SMTP服务器需要SSL,但不支持STARTTLS,那么你应该通过设置启用SSL email_ssl = TRUE。
- email_server = smtp.mydomain.com
- email_server_port = 25
- email_username = [email protected]
- email_password = abc
- email_from = admin [email protected]
- email_ssl = false
- harbor_admin_password:管理员的初始密码。该密码仅在Harbor 第一次启动时生效。之后,此设置将被忽略,并且应在UI中设置管理员的密码。请注意,默认用户名/密码为admin / Harbor12345。
- auth_mode:使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。重要提示:从现有的Harbor 实例升级时,必须确保auth_modeharbor.cfg在启动新版本的Harbor之前是一样的。否则,升级后用户可能无法登录。
- ldap_url:LDAP端点URL(例如ldaps://ldap.mydomain.com)。 仅当auth_mode设置为ldap_auth时才使用。
- ldap_searchdn:具有搜索LDAP / AD服务器权限的用户的DN(例如uid=admin,ou=people,dc=mydomain,dc=com)。
- ldap_search_pwd:由ldap_searchdn指定的用户的密码。
- LDAP_BASEDN:基本DN查找用户,如ou=people,dc=mydomain,dc=com。 仅当auth_mode设置为ldap_auth时才使用。
- LDAP_FILTER:用于查找用户,例如,搜索过滤器(objectClass=person)。
- ldap_uid:用于在LDAP搜索期间匹配用户的属性,它可以是uid,cn,电子邮件或其他属性。
- ldap_scope:搜索用户的范围,1-LDAP_SCOPE_BASE,2-LDAP_SCOPE_ONELEVEL,3-LDAP_SCOPE_SUBTREE。默认值为3。
- self_registration:(开或关,默认为开)启用/禁用用户注册自己的能力。禁用时,只能由管理员用户创建新用户,只有管理员用户才能在海港创建新用户。 注意:当auth_mode设置为ldap_auth时,自注册功能始终被禁用,并且该标志被忽略。
- token_expiration:令牌服务创建的令牌的到期时间(以分钟为单位),默认值为30分钟。
- project_creation_restriction:用于控制用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目,设置为“adminonly”,以便只有admin才能创建项目。
- verify_remote_cert:(上或关闭,默认为上)该标志,判断是否验证SSL / TLS证书时码头与远程注册表实例通信。将此属性设置为off可绕过SSL / TLS验证,SSL / TLS验证通常在远程实例具有自签名或不受信任的证书时使用。
配置存储后端(可选)
默认情况下,Harbor将映像存储在本地文件系统上。在生产环境中,您可以考虑使用其他存储后端而不是本地文件系统,如S3,Openstack Swift,Ceph等。您需要更新的是storage文件中的部分common/templates/registry/config.yml。例如,如果您使用Openstack Swift作为存储后端,则该部分可能如下所示:
storage:swift:username: adminpassword: ADMIN_PASSauthurl: http://keystone_addr:35357/v3/authtenant: admindomain: defaultregion: regionOnecontainer: docker_images注意:有关注册表的存储后端的详细信息,请参阅registry配置参考。
完成安装和启动harbor
一旦配置了ports.cfg和存储后端(可选),请使用install.sh脚本安装并启动Harbor 。请注意,在线安装程序可能需要一些时间才能从Docker集线器下载Harbour图像。
默认安装(无公证)
在1.1.0版本之后,Harbor已经与Notary进行了集成,但默认情况下安装不包括公证服务。
$ sudo ./install.sh
如果一切正常,您应该可以打开一个浏览器,访问http://reg.yourdomain.com的管理员门户(将reg.yourdomain.com更改为您配置的主机名harbor.cfg)。请注意,默认管理员用户名/密码为admin / Harbor12345。
harbor使用
登录harbor并创建一个项目,如果是公开项目,则所有人都能访问,如果是私密项目,则必须登录后才能访问。
配置主机(非安装harbor的主机)的Docker守护进程的--insecure-registry参数,然后重启docker服务。centos 7 1.10版本以后的主机可以使用下面的方法配置:没配置过加速器的可以按下面命令配置:
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "insecure-registries": ["harbor地址"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
如果已经有这个文件,则可以将
"insecure-registries": ["harbor地址"]
添加到文件中,注意json格式然后重启docker服务
sudo systemctl daemon-reloadsudo systemctl restart docker
使用docker info查看是否配置成功
Insecure Registries: 172.16.1.129 harbor地址 127.0.0.0/8
登录harbor
$ docker login 172.16.1.129Username : usernamePassword: Login Succeeded
推送一个镜像到镜像仓库harbor中创建一个tomcat项目镜像需要先通过docker tag 修改为(harbor地址/项目名称)开头
$ docker tag tomcat:7.0.73-7 172.16.1.129/tomcat/7.0.73-7$ docker push 172.16.1.129/tomcat/7.0.73-7The push refers to a repository [172.16.1.129/tomcat/7.0.73-7]75a7395b2296: Pushed d36caa27a882: Pushed 7326b6559ecf: Pushed feaa57cbddb1: Layer already exists 3bf614abaf86: Pushed b0becd8213e2: Pushed fd47add8e1d7: Pushed 39c0bfc3a1cb: Pushed f1d01a184c99: Layer already exists 72e128c24795: Pushed 782d5215f910: Pushed 0eb22bfb707d: Layer already exists a2ae92ffcd29: Layer already exists latest: digest: sha256:39e8f420bad3198d4f773c77694bdeb47500a9a79472cb0e42b4e3af7ea43c0d size: 3039[iven@docker-node ~]$
现在上harbor就可以看到这个镜像了。