Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用

1、Harbor简介

1.一、什么是Harbor

几个VMware中国的人搞了一个容器镜像仓库。
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。前端

1.二、Harbor架构

下图展现harbor主要的功能组件和信息流向:

主要组件包括proxy,他是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,上图中经过深蓝色先标识;ui提供了一个web管理页面,固然还包括了一个前端页面和后端API,底层使用mysql数据库;registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后经过hook通知ui建立repository,上图经过红色线标识,固然registry的token认证也是经过ui组件完成;adminserver是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回须要加载adminserver的配置,经过灰色线标识;jobsevice是负责镜像复制工做的,他和registry通讯,从一个registry pull镜像而后push到另外一个registry,并记录job_log,上图经过紫色线标识;log是日志汇总组件,经过docker的log-driver把日志汇总到一块儿,经过浅蓝色线条标识。node

1.三、Harbor功能

1.3.一、用户管理

基于角色的访问控制--RBAC。用户分为三种角色:项目管理员(MDRWS)、开发人员(RWS)和访客(RS),固然还有一个最高管理员权限admin系统管理员。
M:管理、D:删除、R:读取、W:写入、S:查询,很是细致的权限管理体系。固然一个用户能够在不一样的项目里面扮演不一样角色,这个和现实的用户管理体系很是吻合。python

1.3.二、项目管理

项目管理是系统最主要的一个功能模块,项目是一组镜像仓库的逻辑集合,是权限管理和资源管理的单元划分。一个项目下面有多个镜像仓库,而且关联多个不一样角色的成员,镜像复制也是基于项目的,经过添加复制规则,能够将项目下面的镜像从一个harbor迁移到另外一个harbor,而且能够经过日志查看复制过程,并有retry机制。mysql

1.3.三、配置管理和日志查询

配置管理主要是配置harbor的认证模式,企业内部使用,一般都是对接到公司LDAP上面,固然harbor也支持数据库认证;还能够设置token的有效时间。用户对镜像的pull和push操做均可以被harbor记录下来,这样为排查文件提供了重要手段。harbor还集成了clair镜像扫描功能,它是cereos开发的一款漏洞扫描工具,能够检查镜像操做系统以及上面安装包是否与已知不安全的包版本相匹配,从而提升镜像安全性。linux

1.3.四、Harbor高可用部署

经过三个harbor完成高可用部署,前面经过负载均衡器对外提供服务。共享数据库与缓存。结构以下:nginx

本章节内容参考原文:https://blog.csdn.net/u010278923/article/details/77941995 git

2、基础环境搭建

2.一、docker搭建

若是须要详细了解docker有他相关操做,请详见《docker在Ubuntu下1小时快速学习》如下操做步骤均在root用户下操做,2个版本任选其一github

2.1.一、获取docker_17.03.2~ce的deb下载地址

一、进入https://download.docker.com/linux/ubuntu/dists/页面
二、在页面中会看到ubuntu不一样版本的代号,选择本身对应的版本进入,这次安装的是ubuntu16.04,所以选择xenial链接进入web


三、而后一路选择xenial/pool/stable/amd64/,stable是稳定版本,ubuntu须要的是amd64的软件格式
四、在https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/页面就能找打所须要的稳定版本dockersql


五、右键点击在所须要的版本上,选择复制链接地址,便可获得下载地址路径,以下:
https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

2.1.二、下载安装docker-ce_17.03.2~ce版本

一、检查内核是否符合要求,Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,建议在Ubuntu14.04版本

root@duke:/var/cache/apt/archives# uname -r
3.13.0-135-generic

二、安装docker

root@duke:~/docker# wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
--2017-12-19 19:30:29--  https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb
正在解析主机 download.docker.com (download.docker.com)... 52.85.158.200, 52.85.158.223, 52.85.158.109, ...
正在链接 download.docker.com (download.docker.com)|52.85.158.200|:443... 已链接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 19183424 (18M) [application/x-debian-package]
正在保存至: “docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb”
docker-ce_17.03.2~ce-0~ubuntu-xenial_ 100%[======================================================================>]  18.29M  26.0KB/s    in 11m 35s 
2017-12-19 19:42:05 (27.0 KB/s) - 已保存 “docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb” [19183424/19183424])
root@duke:~/docker# dpkg -i docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

三、启动docker 后台服务

root@duke: service docker start
start: Job is already running: docker

2.1.三、获取docker-1.13.1的tgz包下载地址

一、进入https://github.com/moby/moby/releases页面


二、点击按钮,进入以页面就能够根据选择选取版本


三、当前要选择docker-ce_17.03.2~ce或者docker-1.13.1,所以通过翻页后,找到对应版本,点击进入页面,找到downloads信息后,就能够找ubuntu系统上进行下载


四、Docker的tgz包加压后,并不能加载到系统服务中,因此不太推荐此种方式安装,建议仍是采用deb包安装方式,能够省去没必要要的麻烦

2.1.4下载docker-1.13.1.tgz版本

一、检查内核是否符合要求,Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,建议在Ubuntu14.04版本

root@duke:/var/cache/apt/archives# uname -r
3.13.0-135-generic

二、安装docker

root@duke:~/docker# wget https://get.docker.com/builds/Linux/x86_64/docker-1.13.1.tgz
--2017-12-20 13:57:23--  https://get.docker.com/builds/Linux/x86_64/docker-1.13.1.tgz
正在解析主机 get.docker.com (get.docker.com)... 54.182.1.40, 54.182.1.36, 54.182.1.148, ...
正在链接 get.docker.com (get.docker.com)|54.182.1.40|:443... 已链接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度: 27851024 (27M) [application/x-tar]
正在保存至: “docker-1.13.1.tgz”
docker-1.13.1.tgz                     100%[======================================================================>]  26.56M  56.1KB/s    in 9m 35s  
2017-12-20 14:07:00 (47.3 KB/s) - 已保存 “docker-1.13.1.tgz” [27851024/27851024])

2.二、docker-compoes搭建

如下操做步骤均在root用户下操做,2个方法任选其一

2.2.1 离线安装docker-compoes

一、运行如下命令下载最新版本的docker-compose并进行安装

curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

二、更改二进制文件的权限,使其可以运行

chmod +x /usr/local/bin/docker-compose

三、测试安装

docker-compose --version

2.2.2 在线安装docker-compoes

一、安装python源

apt-get update
apt-get install python-pip

二、删除老版docker-compose

pip uninstall docker-compose

三、安装docker-compose

pip install docker-compose

四、测试安装

docker-compose --vesion

3、Harbor环境要求

3.一、硬件要求

资源 配置 描述
CPU 最少 2 CPU 4CPU(推荐)
内存 最少 4GB 8GB(推荐)
磁盘 * *

3.二、软件要求

软件名 版本
描述
Python 2.7或更高版本 注意: 你可能必须在Linux发行版(Gentoo,Arch)上安装Python,默认状况下没有安装Python解释器
Docker 1.10或更高版本 有关安装说明,请参考: https://docs.docker.com/engine/installation/
Docker-Compose 1.6.0或更高版本 有关安装说明,请参考: https://docs.docker.com/compose/install/
Openssl 推荐最新版本 为Harbor生成证书和密钥

3.三、网络要求

端口 协议
描述
443 HTTPS Harbor UI和API将接受此端口上的https协议请求
4443 HTTPS 只有在启用Notary时才须要链接到Docker Content Trust服务
80 HTTP Harbor UI和API将接受此端口上的http协议请求

4、Harbor版本获取

官方本获取页面,点击下载
版本分为在线安装板和离线安装版本,根据需求选择对应版本下载便可。
在线版本和离线版本安装方法同样,本文以离线安装为主。

5、单节点离线Harbor无SSL认证搭建

5.一、解压压缩包

tar xvf harbor-offline-installer-v1.7.0-rc2.tgz

5.二、Harbor配置参数说明

【注意】:因为Harbor安装时是以容器方式安装,因此在执行安装前,必须先完成相关配置工做。

解压压缩包会获得harbor文件夹,harbor.cfg配置文件位于文件夹根目录。在harbor.cfg中有两类参数,必需参数和可选参数。

参数
说明
必要参数 须要在配置文件中设置这些参数。若是用户更新harbor.cfg并运行install.sh脚本以从新安装Harbor,更改的参数将生效。
可选参数 这些参数对于更新是可选的,即用户能够将它们保留为默认值,并在启动Harbour后在Web UI上更新它们。若是已经配置harbor.cfg,这些参数只会在首次启动Harbour时生效。harbor.cfg将忽略对这些参数的后续修改。
【注意】:若是你选择经过UI设置这些参数,请务必在Harbour启动后当即执行此操做。
特别是,你必须在Harbour中注册或建立新用户以前,设置所需的auth_mode。当系统中有用户时(除默认管理员用户外),没法更改auth_mode。

必要参数

【注意】:至少要修改hostname
参数名
参数说明
hostname 目标主机的主机名,用于访问UI和Harbor服务。它应该是目标计算机的IP地址或域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1做为主机名,由于外部客户端须要访问Harbor服务!
ui_url_protocol ( http或https。默认为http)用于访问UI和令牌/通知服务的协议。若是启用了公证,则此参数必须为https。默认状况下,这是http。要设置https协议,请参阅使用HTTPS访问配置Harbor。
db_password 用于db_auth的MySQL数据库的root密码。生产环境请修改此密码
max_job_workers (默认值为3)做业服务中的最大复制工做数。对于每一个镜像复制做业,程序将存储库的全部标记同步到远程目标。增长此数量能够在系统中实现更多并发复制做业。可是,因为每一个复制进程都消耗必定的网络/CPU/IO资源,请根据主机的硬件资源仔细选择该参数的值。
customize_crt (on或off,默认为on),若是此属性on,准备脚本建立私钥和根证书,用于生成/验证registry的令牌。当外部源提供密钥和根证书时,将此属性设置为off。有关详细信息,请参阅自定义密钥和harbor令牌服务证书。
ssl_cert SSL证书的路径,仅在协议设置为https时应用
ssl_cert_key SSL密钥的路径,仅在协议设置为https时应用
secretkey_path 用于加密或解密复制策略中远程Harbor密码的密钥路径。
log_rotate_count 日志文件在被删除以前会被轮转log_rotate_count次。若是count为0,则删除旧版本而不是轮转。
log_rotate_size 仅当日志文件大于log_rotate_size字节时才会轮转日志文件。若是大小后跟k,则假定大小以千字节为单位。若是使用M,则大小以兆字节为单位,若是使用G,则大小为千兆字节。尺寸100,尺寸100k,尺寸100M和尺寸100G都是有效的。

可选参数

参数名
参数说明
Email settings Harbor须要这些参数才能向用户发送“密码重置”电子邮件,而且仅在须要该功能时才作配置。另外,请注意,在默认状况下SSL链接没有启用,若是你的SMTP服务器须要SSL,那么你应该经过设置email_ssl = TRUE参数来启用SSL,但不支持STARTTLS。若是电子邮件服务器使用自签名证书或不受信任证书,则须要设置email_insecure = true。有关email_identity的详细说明,请参阅rfc2595
- email_server = smtp.mydomain.com
- email_server_port = 25
- email_identity =
- email_username = sample_admin@mydomain.com
- email_password = abc
- email_from = admin [sample_admin@mydomain.com(mailto:sample_admin@mydomain.com)
- email_ssl = false
- email_insecure = false
harbor_admin_password 管理员的初始密码。此密码仅在Harbor首次启动时生效。以后将忽略此设置,而且应在UI中设置管理员密码。请注意:默认用户名/密码为admin/Harbor12345
auth_mode 使用的身份验证类型。默认状况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。重要信息:从现有Harbor实例升级时,必须确保在启动新版本的Harbor以前,harbor.cfg配置文件中auth_mode相同。不然,用户可能没法在升级后登陆。
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,email或其余属性。
ldap_scope 搜索用户的范围,0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-LDAP_SCOPE_SUBTREE。默认值为2。
self_registration ( on或off。默认on)启用/禁用用户自助注册功能。禁用时,新用户只能由管理员用户建立,只有管理员能够在Harbor中建立新用户。 注意:当auth_mode设置为ldap_auth时,始终禁用自助注册功能,并忽略此设置。
token_expiration 令牌服务建立的令牌到期时间(以分钟为单位),默认为30分钟。
project_creation_restriction 用于控制用户有权建立项目的设置。默认状况下,每一个人均可以建立一个项目,设置为“adminonly”,只有管理员才能建立项目。

配置存储后端(可选)
默认状况下,Harbor将镜像存储在本地文件系统中。在生产环境中,能够考虑使用其余存储后端而不是本地文件系统,如S3,OpenStack Swift,Ceph等。须要更新的是storage文件中的部分common/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
【注意】:有关注册表存储后端的详细信息,请参阅 registry配置参考。

5.三、Harbor自定义监听端口

默认状况下,Harbor监听80(HTTP)和443(HTTPS),若是端口已经被占用,可使用自定义端口。

对于HTTP协议
一、修改 docker-compose.yml

将第一个80修改成自定义端口,例如8888:80。

proxy:
    image: goharbor/nginx-photon:v1.7.0
    container_name: nginx
    restart: always
    cap_drop:
      \- ALL
    cap_add:
      \- CHOWN
      \- SETGID
      \- SETUID
      \- NET_BIND_SERVICE
    volumes:
      \- ./common/config/nginx:/etc/nginx:z
    networks:
      \- harbor
    dns_search: .
    ports:
           \- 8888:80        将80端口映射到8888
           \- 8443:443   将443端口映射到8443
      \- 4443:4443
    depends_on:
      \- postgresql
      \- registry
      \- core
      \- portal
      \- log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://192.168.0.2:1514"
        tag: "proxy"

二、修改harbor.cfg,将8888端口添加到参数“hostname”

hostname = 192.168.0.2:8888
【注意】:在启用http的状况下,https的将不能被登录,同时SSL认证也失效。

5.四、安装Harbor

harbor文件夹中有install.sh脚本,一旦harbor.cfg和存储后端(可选)配置完成,就能够镜像Harbor安装。请注意,在线安装须要一些时间从Docker hub下载Harbor镜像,具体根据实际网络状况。
因为Harbor已与Notary和Clair集成(用于漏洞扫描),因此存在如下4中安装,任选其一便可:

  • 默认安装(没有Notary/Clair)
  • 使用Notary安装
  • 使用Clair安装
  • 同时安装Clair和Notary
【注意】:由于本章节没有采用HTTPS方式安装,因此只能选择默认安装方式进行安装。

5.4.一、默认安装(没有Notary/Clair)

sudo ./install.sh

Harbor已与Notary和Clair集成(用于漏洞扫描)。可是,默认不安装Notary或Clair服务。若是一切正常,应该可以打开浏览器访问http://192.168.0.2:8888/ 上的管理门户(192.168.0.2:8888harbor.cfg配置的hostname,默认管理员用户名/密码为:admin/Harbor12345)。以下图:


登陆管理门户并建立一个新项目,例如: myproject。而后,可使用docker命令登陆和推送镜像。

【注意】:默认状况下,Harbor的默认安装使用HTTP协议,而Docker默认信任https协议。
因此,要想docker命令登陆和推送镜像,
须要添加 "insecure-registries":["192.168.0.2:8888"]参数到docker的 /etc/docker/daemon.json配置文件中,
并重启docker服务。


可使用下面命令进行验证是否搭建成功

docker login 192.168.0.2:8888

过程以下:

root@duke:/etc/docker# docker login 192.168.0.2:8888
Username (admin): 输入帐户:admin
Password: 输入默认密码:Harbor12345
Login Succeeded

6、单节点离线Harbor有SSL认证搭建

6.一、配置自定义CA认证

6.1.一、建立root CA私钥

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

执行步骤以下:

root@duke:~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
Generating a 4096 bit RSA private key
.............................................++
.............................................++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:NanJing
Locality Name (eg, city) []:NanJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:rancher
Organizational Unit Name (eg, section) []:info technology
Common Name (e.g. server FQDN or YOUR name) []:duke
Email Address []:xxxxx@126.com

6.1.二、为服务端(web)生成证书签名请求文件

若是你使用相似demo.rancher.com的FQDN域名访问,则须要设置demo.rancher.com做为CN;若是你使用IP地址访问,CN则为IP地址:

openssl req -newkey rsa:4096 -nodes -sha256 -keyout demo.rancher.com.key -out  demo.rancher.com.csr

或者

openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.0.2.key -out 192.168.0.2.csr

执行步骤以下:

【注意】:
Commone Name必定要是你要授予证书的FQDN域名或主机名,而且不能与生成root CA设置的Commone Name相同。
challenge password能够不填。
root@duke:~# openssl req -newkey rsa:4096 -nodes -sha256 -keyout 192.168.0.2.key -out 192.168.0.2.csr
Generating a 4096 bit RSA private key
....................................................................++
....................................................................++
writing new private key to '192.168.0.2.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:NanJing
Locality Name (eg, city) []:NanJing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:RANCHER
Organizational Unit Name (eg, section) []:info technology
Common Name (e.g. server FQDN or YOUR name) []:192.168.0.2
Email Address []:xxxxx@126.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:附属属性修改密码,能够不填
An optional company name []:附属属性另外一个公司名称,能够不填

6.1.三、用1.1建立的CA证书给1.2生成的签名请求进行签名

openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out 192.168.0.2.crt

执行步骤以下:

root@duke:~# openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out 192.168.0.2.crt
Signature ok
subject=/C=CN/ST=NanJing/L=NanJing/O=RANCHER/OU=info technology/CN=192.168.0.2/emailAddress=xxxxx@126.com
Getting CA Private Key

6.1.四、使用IP进行签名

若是你使用IP,例如192.168.0.2来链接,则能够改成运行如下命令

echo 'subjectAltName = IP:192.168.0.2' > extfile.cnf
openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out  192.168.0.2.crt

执行步骤以下:

root@duke:~# echo 'subjectAltName = IP:192.168.0.2' > extfile.cnf
root@duke:~# openssl x509 -req -days 365 -in 192.168.0.2.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out 192.168.0.2.crt
Signature ok
subject=/C=CN/ST=NanJing/L=NanJing/O=RANCHER/OU=info technology/CN=192.168.0.2/emailAddress=xxxxx@126.com
Getting CA Private Key

【注意】:subjectAltName后的IP不需添加端口。

6.1.五、检查文件

通过上面步骤操做后,会生成ca.crt、ca.srl、ca.key、192.168.0.2.crt、192.168.0.2.key、192.168.0.2.csr、extfile.cnf这几个文件。

执行步骤以下:

root@duke:~# ls
192.168.0.2.crt 192.168.0.2.key ca.crt ca.srl docker-1.13.1.tgz kubectl shipyard var 模板 图片 下载 桌面
192.168.0.2.csr anaconda3 ca.key docker extfile.cnf mapd-docker-storage tigervncserver_1.6.80-4_amd64.deb 公共的 视频 文档 音乐

6.二、Harbor配置

6.2.一、配置harbor文件

若是要启用SSL,并进行HTTPS登录,就必须配置harbor.cfg如下配置

hostname = 192.168.0.2:8443             在修改了默认端口状况下,必须配置端口,此处为8443,不配置将没法保证 docker login的正常登录
ui_url_protocol = https              要启用SSL认证,就必须配置为https
customize_crt = on                   要启用SSL认证,就必须配置为on
ssl_cert = /data/cert/server.crt     私有证书存放地址
ssl_cert_key = /data/cert/server.key 私有密钥存放地址
secretkey_path = /data               配置目录

### 6.2.二、配置harbor的自定义CA认证 复制6.1章节生成的密钥到指定的秘钥目录 ``` cp 192.168.0.2.crt /data/cert/server.crt cp 192.168.0.2.key /data/cert/server.key ``` ## 6.三、Harbor自定义监听端口 默认状况下,Harbor监听80(HTTP)和443(HTTPS),若是端口已经被占用,可使用自定义端口。 **对于HTTPS协议** **一、修改 docker-compose.yml** 将第一个443修改成自定义端口,例如8443:443。

proxy:
    image: goharbor/nginx-photon:v1.7.0
    container_name: nginx
    restart: always
    cap_drop:
      \- ALL
    cap_add:
      \- CHOWN
      \- SETGID
      \- SETUID
      \- NET_BIND_SERVICE
    volumes:
      \- ./common/config/nginx:/etc/nginx:z
    networks:
      \- harbor
    dns_search: .
    ports:
           \- 8888:80        将80端口映射到8888
           \- 8443:443   将443端口映射到8443
      \- 4443:4443
    depends_on:
      \- postgresql
      \- registry
      \- core
      \- portal
      \- log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://192.168.0.2:1514"
        tag: "proxy"

二、修改harbor.cfg,将8443端口添加到参数“hostname”

hostname = 192.168.0.2:8443
【注意】:在启用https的状况下,http的将不能被登录,同时启用了SSL认证。

6.四、安装Harbor

harbor文件夹中有install.sh脚本,一旦harbor.cfg和存储后端(可选)配置完成,就能够镜像Harbor安装。请注意,在线安装须要一些时间从Docker hub下载Harbor镜像,具体根据实际网络状况。
因为Harbor已与Notary和Clair集成(用于漏洞扫描),因此存在如下4中安装,任选其一便可:

  • 默认安装(没有Notary/Clair)
  • 使用Notary安装
  • 使用Clair安装
  • 同时安装Clair和Notary
【注意】:由于本章节没有采用HTTPS方式安装,因此只能选择默认安装方式进行安装。

6.4.一、默认安装(没有Notary/Clair)

sudo ./install.sh

Harbor已与Notary和Clair集成(用于漏洞扫描)。可是,默认不安装Notary或Clair服务。若是一切正常,应该可以打开浏览器访问http://192.168.0.2:8888/ 上的管理门户(192.168.0.2:8888harbor.cfg配置的hostname,默认管理员用户名/密码为:admin/Harbor12345)。以下图:


管理门户并建立一个新项目,例如: myproject。而后,可使用docker命令登陆和推送镜像。

【注意】:默认状况下,Harbor的默认安装使用HTTP协议,而Docker默认信任https协议。
因此,要想docker命令登陆和推送镜像,
须要添加 "insecure-registries":["192.168.0.2:8888"]参数到docker的 /etc/docker/daemon.json配置文件中,
并重启docker服务。


可使用下面命令进行验证是否搭建成功

docker login  -u admin -p Harbor12345 192.168.0.2:8443

过程以下:

root@duke:/etc/docker# docker login  -u admin -p Harbor12345 192.168.0.2:8443
Login Succeeded

6.4.二、使用Notary安装

要使用Notary服务安装Harbour,请在运行install.sh时添加参数:

sudo ./install.sh --with-notary

注意:使用notary安装,参数ui_url_protocol必须设置为“https”。

6.4.三、使用Clair安装

要使用Clair服务安装Harbour,请在运行install.sh时添加参数:

sudo ./install.sh --with-clair

6.4.四、同时安装Clair和Notary

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

6.五、重装或重配Harbor

6.5.一、默认安装方式

若是在安装配置HTTPS的Harbor前,已经默认方式安装了HTTP的harbor,能够执行如下操做,前提是同版本操做。

sudo docker-compose down -v  中止并卸载harbor
sudo vim harbor.cfg          从新配置harbor
sudo prepare                 从新生成harbor配置
sudo docker-compose up -d    从新安装启动harbor

删除Harbor的数据库和图像数据(用于干净的从新安装)

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

6.5.二、与notary或者Clair一块儿安装时管理Harbor的生命周期

当Harbour与Notary或者Clair一块儿安装时,docker-compose命令须要指定一个或者两个额外的模板文件。用于管理Harbour生命周期的docker-compose命令是:

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

若是要在使用Notary安装Harbor时更改配置并从新部署Harbour,则应使用如下命令:

sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml down -v
sudo vim harbor.cfg
sudo prepare --with-notary
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml up -d
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f   ./docker-compose.clair.yml down -v
sudo vim harbor.cfg
sudo prepare --with-notary --with-clair
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f   ./docker-compose.clair.yml up -d

6.六、故障排除

当Harbor没法正常工做时,请运行如下命令以查明Harbor的全部容器是否处于UP状态:

sudo docker-compose ps

若是容器不是UP状态,检查目录容器的日志文件/var/log/harbor。例如,若是容器harbor-ui未运行,则应查看日志文件ui.log。

相关文章
相关标签/搜索