`
m635674608
  • 浏览: 4952458 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

企业级Docker Registry开源工具Harbor的介绍以及使用指南

 
阅读更多
摘要: 在使用Docker工具去构建和管理整个容器生态的过程中,image可以说是一个重要的环节,各种容器的运行也都必须依赖image才能启动。因此images的存储就变的非常重要了,当然在docker官方是提供了registry服务的,对于基本的镜像存储可以说是已经满足了很多需求。然而在一个企业内部,我们需要考虑更多的问题,比如镜像的管理,web化的展示,权限的管理以及审查等多个需求。可幸的是vmware公司开源了Harbor工具,个人感觉还是不错的,本篇主要介绍Harbor以及基本的使用指南。

Harbor 的简介以及基本架构

Harbor简介

基本架构

Harbor安装和配置指导

Harbor 可以使用以下三种方式进行安装部署:

  • 在线安装: 使用者可以直接从docker hub上下载harbor的官方镜像。

  • 离线安装: 使用者需要下载源码包,并进行自己构建images。源码包比较大

  • Virtual Appliance: 一般使用这种方式在第三方平台搭建一个私有仓库作为平台的组建比如vsphere等,需要下载OVA 版本的Harbor.

官方下载页面 请点击我 .

需要安装Harbor's virtual appliance,请点击我.

本篇指导主要讲解通过使用在线和离线方式去一步步安装和配置Harbor.安装的步骤基本上都是相同的。

如果用户运行了老版本的harbor,可能需要迁移数据到新的数据库队列中,详细的步骤请点击我

另外在kubernetes上面部署的步骤和看以下链接harbor on kubernets

Harbor依赖

Harbor 被作为一个docker容器部署在服务区上,因此,他能够被部署在任何linux发行版本。目标主机上需要安装python,docker,以及docker-compose工具。

  • Python 需要 2.7+. 需要注意的是,最好安装对应linux发型版本的python。
  • Docker engine 需要1.10+ 目前比较新的版本1.12. docker安装
  • Docker Compose 需要 1.6.0+. Compose安装

Harbor安装与配置

安装步骤为以下几个部分:

  1. 下载安装包
  2. 修改相关配置 harbor.cfg;
  3. 运行 install.sh 去安装和启动harbor;

1.下载安装包

点击链接下载二进制包 Harbor下载 . 选择一个在线或者离线包进行下载. 使用 tar 命令解压下载的源码包

在线包安装:

    $ tar xvf harbor-online-installer-<version>.tgz

离线包安装:

    $ tar xvf harbor-offline-installer-<version>.tgz

2.配置 Harbor

配置参数被放在文件 harbor.cfg 中. 详细参数讲解 至少得配置 hostname 参数

  • hostname: 配置目标主机的主机名, 被用来访问Harbor ui 和镜像仓库的,可以配置为ip地址和全域名,比如192.168.1.10 or reg.yourdomain.com. 不要使用 localhost or 127.0.0.1 为主机名
  • ui_url_protocol: (http or https. 默认协议为 http) 该协议被用来访问 the UI and the token/notification 服务. 默认是 http. 想要设置https协议,请看链接 配置Harbor支持https协议.
  • Email settings: 配置Harbor来发送邮件,当然改配置并不是必须的 .注意:默认的ssl链接没有被启用,如果SMTP需要ssl支持,可以设置以下参数以支持。
  • email_ssl = true

      * email_server = smtp.mydomain.com 
      * email_server_port = 25
      * email_username = sample_admin@mydomain.com
      * email_password = abc
      * email_from = admin <sample_admin@mydomain.com>  
      * email_ssl = false        
    
  • harbor_admin_password: 设置管理员内部密码,该密码紧紧在第一次启动Harbor的时候生效.在之后这个设置被忽略,管理员的密码将在UI中重新设置。 默认的用户名和密码如下: admin/Harbor12345 .

  • auth_mode: 被用来认证的方式,默认使用的是 db_auth,该认证会被肢解存储到数据库中。 如果需要设置LDAP方式认证需要使用ldap_auth.

  • ldap_url: LDAP认证方式的URL (e.g. ldaps://ldap.mydomain.com). 当 auth_mode 被设置为ldap_auth 的时候。

  • ldap_searchdn: 链接LDAP/AD服务的用户域(e.g. uid=admin,ou=people,dc=mydomain,dc=com).

  • ldap_search_pwd: 为上面设定的用户域设置密码 ldap_searchdn.

  • ldap_basedn: 基础域为方便寻找一个用户e.g. ou=people,dc=mydomain,dc=com. 仅当 auth_mode is 设置为ldap_auth的时候才使用

  • ldap_filter:用户搜索过滤 (objectClass=person).

  • ldap_uid: 该参数被用来匹配一个LDAP搜索的用户,可以使uid,cn,email或者其他的方式。

  • ldap_scope: 用户搜索范围, 1-LDAP_SCOPE_BASE, 2-LDAP_SCOPE_ONELEVEL, 3-LDAP_SCOPE_SUBTREE. Default is 3.

  • db_password: mysql数据库root用户密码 db_auth.
  • self_registration: (on or off. Default is on) 启用和关闭用户注册功能.当被关闭,新用户职能通过admin用户去创建。 _注意: 当 auth_mode 被设置为 ldap_auth, self-registration 会被一直关闭,该参数也会被忽略。

  • use_compressed_js: (on or off. 默认为 on) 生产中使用,建议将该参数设置为 on. 在部署模式中将参数设置为off 以至于js 文件能够被分开去修改.

  • max_job_workers: (默认为 3) 设置在任务服务中最大的工作副本, 每一个image副本任务,会有一个worker从仓库中将所有的tag同步到远端。增大这个值回允许更多当前的副本任务,然而因为每个worker都会去消耗一定的网络/cpu/io等资源,必须根据系统的资源进行合理设置该值。
  • secret_key: 该值为加解密在副本策略中远端仓库的密码,长度为16位字符。生产中必需修改该值.NOTE: After changing this key, previously encrypted password of a policy can not be decrypted.

  • token_expiration: token过期时间,默认30分钟

  • verify_remote_cert: (on or off. 默认 on) 该参数决定了当harbor盒远端的registry实例交互的时候是否使用SSL/TLS .设置为off 的时候,一般远端的registry会采用自签名或者未受信任的证书。
  • customize_crt: (on or off. 默认为on) 当设置为on的时候,会使用脚本去创建私钥和root证书去认证registry的token

  • 以下参数:crt_countrycrt_statecrt_locationcrt_organizationcrt_organizationalunit,crt_commonnamecrt_email 被用来省城key。设置为off的时候,key和root证书可以被应用在外部的源中。为Harbor token服务自定义证书

3. 配置后端存储 (可选的)

默认,Harbor会存储镜像文件到本地文件系统。在生产环境中应该考虑使用一些后端存储去代替本地文件系统,比如S3,openstack swift或者ceph等。可以在文件templates/registry/config.yml去选择更新存储方式。比如你想使用Openstack Swift作为你的存储后端,对应的配置会如下:

storage:
  swift:
    username: admin
    password: ADMIN_PASS
    authurl: http://keystone_addr:35357/v3/auth
    tenant: admin
    domain: default
    region: regionOne
    container: docker_images

注意: 关于docker registry在存储后端的详细信息可以查看相应链接 Registry 配置详情 .

4.完成Harbor的安装并进行启动Harbor

一旦 harbord.cfg 和存储后端被配置完成就可以使用install.sh脚本进行安装和启动Harbor服务。 需要注意的是,执行该操作可能会花费一些,因为需要从docker hub上去下载一些Harbor相关依赖的images文件。

    $ sudo ./install.sh

如果上面脚本执行完成之后,一切工作正常,你就可以在浏览器上输入配置文件harbor.cfg中配置的hostname并且使用配置的admin用户来访问Harbor服务。 http://reg.yourdomain.com 默认的管理员用户名密码: username/password:admin/Harbor12345 .

使用admin用户登录进去后首先创建一个项目,比如myproject. 接下来用户就可以使用docker login reg.yourdomain.com登录并进行push镜像。(默认的registry服务监听的80端口):

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

重要提示: 默认安装的Harbor使用的是 HTTP 协议,因此,当用户在使用的时候,需要在docker daemon的配置文件中增加以下参数 --insecure-registry reg.yourdomain.com 并且重启docker.

更多使用Harbor的详情信息,请点我Harbor使用指南 .

5.配置Harbor以支持HTTPs访问

Harbor不会使用任何认证进行运行,默认使用http来提供服务。这种方式对于部署或者测试环境会相应的简单一些,但是在生产环境中不建议那样做。为了启用HTTPS的支持,请看下面的链接 配置Harbor以支持https.

管理 Harbor的生命周期

你可以使用docker-compose去管理Harbor的整个生命周期。以下是相应的管理命令,需要注意的是docker-compose必须得在有docker-compose.yml文件的目录下执行:

停止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

启动Harbor服务:

$ 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

如果需要修改Harbor的配置,首先需要停掉正在运行的 Harbor实例,更新harbor.cfg文件,再次运行install.sh

$ sudo docker-compose down

$ vim harbor.cfg

$ sudo install.sh

删除Harbor容器,保存镜像文件和Harbor的数据库文件:

$ 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

删除Harbor的数据库信息和镜像文件(一般为了纯净安装):

$ rm -r /data/database
$ rm -r /data/registry

更多docker-compose命令使用指南

持久化数据和日志文件

默认情况下,regirstry的数据被持久化到目标主机的/data/目录。当Harbor的容器呗删除或者重新创建的时候,数据不会有任何改变。 另外,Harbor使用rsyslog去收集每个容器的日志,默认的,政协日志文件被存储在目标主机的/var/log/harbor/目录以便进行troubleshooting

配置Harbor监听自定义端口

默认情况下,Harbor监听80和443(需要配置)来作为admin用户登录的入口,当然也可以自定义该端口。

Http协议

1.修改 docker-compose.yml 文件 替换ui中的端口映射, e.g. 8888:80.

proxy:
    image: library/nginx:1.11.5
    restart: always
    volumes:
      - ./config/nginx:/etc/nginx
    ports:
      - 8888:80
      - 443:443
    depends_on:
      - mysql
      - registry
      - ui
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy"

2.修改模版文件 templates/registry/config.yml
, 在参数 "$ui_url"之后增加自定义端口":8888".

auth:
  token:
    issuer: registry-token-issuer
    realm: $ui_url:8888/service/token
    rootcertbundle: /etc/registry/root.crt
    service: token-service

3.运行install.sh更新并启动harbor.

$ sudo docker-compose down
$ sudo install.sh

HTTPS 协议

1.启用Https协议指南 guide.
2.修改 docker-compose.yml配置文件

修改compose文件中的443端口映射,比如: 4443:443.

proxy:
    image: library/nginx:1.11.5
    restart: always
    volumes:
      - ./config/nginx:/etc/nginx
    ports:
      - 80:80
      - 4443:443
    depends_on:
      - mysql
      - registry
      - ui
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy"

3.修改模版文件 templates/registry/config.yml
在"$ui_url"之后增加自定义端口,比如":4443"

auth:
  token:
    issuer: registry-token-issuer
    realm: $ui_url:4443/service/token
    rootcertbundle: /etc/registry/root.crt
    service: token-service

4.运行 install.sh 更新启动 Harbor.

$ sudo docker-compose down
$ sudo install.sh

故障排查

  1. 当harbor不正常工作的时候,可以使用一下命令查看正在运行的容器信息:
    $ sudo docker-compose ps
       Name                      Command               State                  Ports                   
  -----------------------------------------------------------------------------------------------------
  harbor_jobservice_1   /harbor/harbor_jobservice        Up                                               
  harbor_log_1          /bin/sh -c crond && rsyslo ...   Up    0.0.0.0:1514->514/tcp                    
  harbor_mysql_1        /entrypoint.sh mysqld            Up    3306/tcp                                 
  harbor_proxy_1        nginx -g daemon off;             Up    0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp 
  harbor_registry_1     /entrypoint.sh serve /etc/ ...   Up    5000/tcp                                 
  harbor_ui_1           /harbor/harbor_ui                Up

如果有容器处于非up状态,可以检查容器日志/var/log/harbor

2.对harbor进行弹性负载均衡nginx反响代理的时候可以查看以下文件,
make/config/nginx/nginx.conf 中的相关配置 location /location /v2/ location /service/.

proxy_set_header X-Forwarded-Proto $scheme;

https://my.oschina.net/xxbAndy/blog/786712
分享到:
评论

相关推荐

    为什么有了Dockerregistry还需要Harbor?

    事实上,Habor是在DockerRegistry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等。容器的核心在于镜象的概念,由于...

    搭建Harbor企业级docker仓库-2.7.1

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的...

    Harbor-2.7.2部署和安装所需资料

    Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI,...

    Harbor 搭建 Docker 私有镜像

    harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm...

    harbor-online-installer-v1.8.2.tgz

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的...

    详解基于Harbor搭建Docker私有镜像仓库

    Harbor 是 VMware 公司开源的企业级 DockerRegistry 项目,项目地址为 https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的 registry 为基础,...

    企业级容器镜像仓库Harbor视频课程

    Habor是由VMWare公司开源的容器...事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等。

    Docker搭建私有仓库之Harbor的步骤

     Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装, 它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm...

    Docker培训视频.rar

    │ 01.Docker介绍与体系结构.mp4 │ 02.Docker内部组件、虚拟机与...企业级镜像仓库-Harbor介绍.mp4 │ 17.企业级镜像仓库-Harbor部署.mp4 │ 18.企业级镜像仓库-自签HTTPS证书.mp4 └ 19.企业级镜像仓库-Docker主机从

    harbor-1.5.1

    Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理UI,可基于角色访问控制, AD/LDAP 集成,日志审核等功能,完全的支持中文。 Harbor 的所有组件都在 Dcoker 中部署...

    harbor-offline-installer-v2.0.2.7z

    介绍: 用于存储和分发Docker镜像的企业级Registry服务器。除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。 使用: 使用解压工具进行解压,install即可

    harbor-1.6.0.zip

    Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm...

    docker进阶-搭建私有企业级镜像仓库Harbor

    对于一个刚刚接触Docker的人来说...Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源DockerDistribution。作为一个企业级私有Regist

    harbor-offline-installer-v1.5.0.tgz

    harbor的离线安装包,避免国外镜像下载慢导致安装失败;容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是非常必要的。...是企业级私有 Registry 服务器。

    harbor-offline-installer-v1.9.4.tgz云盘链接及密码.txt

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制...

    harbor-offline-installer-v1.8.1.tgz

    Harbor是由VMware公司开源的企业级的 Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文 支持等功能。

    云盘链接及密码.txt

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制...

    Harbor安装部署和简单操作.DOCX

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制...

Global site tag (gtag.js) - Google Analytics