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

一、Harbor简介

1.1、什么是Harbor

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

1.2、Harbor架构

下图展示harbor主要的功能组件和信息流向:
Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
主要组件包括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把日志汇总到一起,通过浅蓝色线条标识。

1.3、Harbor功能

1.3.1、用户管理

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

1.3.2、项目管理

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

1.3.3、配置管理和日志查询

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

1.3.4、Harbor高可用部署

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

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

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

二、基础环境搭建

2.1、docker搭建

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

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

1、进入https://download.docker.com/linux/ubuntu/dists/页面
2、在页面中会看到ubuntu不同版本的代号,选择自己对应的版本进入,此次安装的是ubuntu16.04,因此选择xenial连接进入

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
3、然后一路选择xenial/pool/stable/amd64/,stable是稳定版本,ubuntu需要的是amd64的软件格式
4、在https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/页面就能找打所需要的稳定版本docker

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
5、右键点击在所需要的版本上,选择复制连接地址,即可得到下载地址路径,如下:
https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.03.2~ce-0~ubuntu-xenial_amd64.deb

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

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

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

2、安装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

3、启动docker 后台服务

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

2.1.3、获取docker-1.13.1的tgz包下载地址

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

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
2、点击按钮,进入以页面就可以根据选择选取版本

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
3、当前要选择docker-ce_17.03.2~ce或者docker-1.13.1,因此经过翻页后,找到对应版本,点击进入页面,找到downloads信息后,就可以找ubuntu系统上进行下载

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
4、Docker的tgz包加压后,并不能加载到系统服务中,所以不太推荐此种方式安装,建议还是采用deb包安装方式,可以省去不必要的麻烦

2.1.4下载docker-1.13.1.tgz版本

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

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

2、安装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.2、docker-compoes搭建

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

2.2.1 离线安装docker-compoes

1、运行以下命令下载最新版本的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

2、更改二进制文件的权限,使其能够运行

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

3、测试安装

docker-compose --version

2.2.2 在线安装docker-compoes

1、安装python源

apt-get update
apt-get install python-pip

2、删除老版docker-compose

pip uninstall docker-compose

3、安装docker-compose

pip install docker-compose

4、测试安装

docker-compose --vesion

三、Harbor环境要求

3.1、硬件要求

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

3.2、软件要求

软件名 版本 描述
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.3、网络要求

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

四、Harbor版本获取

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

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

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

5.1、解压压缩包

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

5.2、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.3、Harbor自定义监听端口

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

对于HTTP协议
1、修改 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"

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

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

5.4、安装Harbor

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

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

5.4.1、默认安装(没有Notary/Clair)

sudo ./install.sh

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

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
登录管理门户并创建一个新项目,例如: 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

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

6.1、配置自定义CA认证

6.1.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.2、为服务端(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.3、用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.4、使用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.5、检查文件

经过上面步骤操作后,会生成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.2、Harbor配置

6.2.1、配置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.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.3、Harbor自定义监听端口 默认情况下,Harbor监听80(HTTP)和443(HTTPS),如果端口已经被占用,可以使用自定义端口。 **对于HTTPS协议** **1、修改 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"

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

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

6.4、安装Harbor

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

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

6.4.1、默认安装(没有Notary/Clair)

sudo ./install.sh

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

Harbor 企业级私有仓库 Ubuntu16.04 搭建及使用
管理门户并创建一个新项目,例如: 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.2、使用Notary安装

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

sudo ./install.sh --with-notary

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

6.4.3、使用Clair安装

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

sudo ./install.sh --with-clair

6.4.4、同时安装Clair和Notary

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

6.5、重装或重配Harbor

6.5.1、默认安装方式

如果在安装配置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.2、与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.6、故障排除

当Harbor无法正常工作时,请运行以下命令以查明Harbor的所有容器是否处于UP状态:

sudo docker-compose ps

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

上一篇:Ubuntu 16.04+.Net Core+Docker+Uginx安装部署


下一篇:[kuangbin带你飞]专题十 匹配问题 二分匹配部分