Harbor是VMWare开源的企业级容器镜像仓库。它扩展了Docker Registry的功能,包括安全性、认证和管理等功能。Harbor支持设置多个仓库并在仓库间复制镜像。另外,Harbor提供了高级的安全属性,包括用户管理、访问控制、行为审计、镜像漏洞扫描等。

官方给出的特点如下:

  • 基于角色的访问控制(RBAC)
  • 基于策略的镜像复制
  • 镜像漏洞扫描
  • LDAP/AD集成支持
  • 镜像删除和垃圾回收
  • Notary镜像真实性确认
  • 图形用户接口
  • 审计
  • 易于部署

下面给出在Linux中进行在线安装的方法。

前期准备

官方给出了安装Harbor主机的软硬件需求。其中硬件需求基本都能满足,软件需求包括:Python 2.7或更高版本;Docker engine 1.10或更高版本,可根据官方教程安装Docker CE:https://docs.docker.com/engine/installation/;Docker Compose 1.6.0或更高版本,安装教程见:https://docs.docker.com/compose/install/;Openss最新版。同时需要443、4443和80端口开放。

安装过程

Harbor安装过程主要为三步:

  1. 下载安装包;
  2. 修改配置文件harbor.cfg
  3. 运行install.sh并启动Harbor。

下载安装包

在Harbor官方项目的release页面下载安装包。本文下载的在线安装包harbor-online-installer-<version>.tgz。然后对其解压:

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

修改配置

在修改配置前首先需要获取证书,为网络传输增加TSL加密。这样不仅可以提高镜像库数据传输的安全性,同时在Harbor中启用Notary进行镜像真实性确认,要求启用https。

使用者可在CA购买授权的证书,也可使用Let's Encrypt提供的免费证书。

采用文章Docker环境中使用Let's Encrypt为Nginx提供免费SSL证书中的方法生成证书。假设证书存放位置为:/data/certbot/letsencrypt

配置文件为解压后文件夹中的harbor.cfg文件。配置参数很多,详细说明见官方文档。本文仅做必要的配置如下:

  • hostname: your.domain.com
  • ui_url_protocol: https
  • ssl_cert: /data/certbot/letsencrypt/live/your.domain.com/fullchain.pem
  • ssl_cert_key: /data/certbot/letsencrypt/live/your.domain.com/privkey.pem

安装和使用Harbor

安装Harbor

使用如下命令安装Harbor,并启用Notary(镜像真实性确认)和Clair(镜像漏洞扫描)。更多关于Notary的信息参考https://docs.docker.com/engine/security/trust/content_trust/,关于Clair的信息参考https://coreos.com/clair/docs/2.0.1/

$ sudo ./install.sh --with-notary --with-clair

注意:如果运行可能出现错误提示,要求安装Docker Compose,而实际已经安装。这是因为docker-compose文件只放在了/usr/local/bin/文件夹下,不在root用户的环境变量中,因此可将docker-compose复制到/usr/sbin/文件夹中:

sudo cp /usr/local/bin/docker-compose /usr/sbin/docker-compose

使用Harbor

安装完成后即可通过浏览器访问Harbor了,在浏览器中输入your.domain.com,使用初始用户名密码admin/Harbor12345登录Harbor。

系统管理/用户管理中创建用户;在项目窗口中新建项目test,访问级别设置为私有,并在项目中新建成员。

在需要使用Harbor的机器中,使用docker login登录仓库,用户名密码为刚创建用户的用户名和密码,并向项目test中推送镜像:

$ docker login your.domain.com
$ docker push your.domain.com/test/image:tag

Harbor运行管理

可以使用docker-compose命令停止或启动Harbor,下面给出相关的命令。(需要在harbor解压缩的文件夹中运行)

停止Harbor:

$ sudo docker-compose stop
Stopping nginx ... done
Stopping harbor-jobservice ... done
Stopping harbor-ui ... done
Stopping harbor-db ... done
Stopping registry ... done
Stopping harbor-log ... done

重新启动Harbor:

$ sudo docker-compose start
Starting log ... done
Starting ui ... done
Starting mysql ... done
Starting jobservice ... done
Starting registry ... done
Starting proxy ... done

如修改配置文件,需要在重新启动前执行prepare脚本文件更新Harbor需要的配置信息:

$ sudo docker-compose down -v
$ vim harbor.cfg
$ sudo prepare
$ sudo docker-compose up -d

删除Harbor容器,同时保留镜像和数据:

$ sudo docker-compose down -v

删除镜像和数据:

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

在安装了Clair和Notary时,Harbor的启动和停止需要指定额外的文件:

$ sudo docker-compose -f ./docker-compose.yml \
  -f ./docker-compose.clair.yml \
  -f ./docker-compose.notary.yml [ up|down|ps|stop|start ]