目录

* 一、什么是 Harbor
<https://www.cnblogs.com/operationhome/p/10868498.html#一什么是-harbor>
* 二、Harbor 安装
<https://www.cnblogs.com/operationhome/p/10868498.html#二harbor-安装>
* 2.1、Harbor 安装环境
<https://www.cnblogs.com/operationhome/p/10868498.html#harbor-安装环境>
* 2.2、Harbor安装
<https://www.cnblogs.com/operationhome/p/10868498.html#harbor安装>
* 2.3 配置HTTPS <https://www.cnblogs.com/operationhome/p/10868498.html#配置https>
* 三、Harbor 的使用
<https://www.cnblogs.com/operationhome/p/10868498.html#三harbor-的使用>
* 3.1、登录Harbor并使用
<https://www.cnblogs.com/operationhome/p/10868498.html#登录harbor并使用>
* 3.2、注意事项 <https://www.cnblogs.com/operationhome/p/10868498.html#注意事项>
* 四、Harbor 管理
<https://www.cnblogs.com/operationhome/p/10868498.html#四harbor-管理>
* 4.1 启动暂停 <https://www.cnblogs.com/operationhome/p/10868498.html#启动暂停>
* 更改配置文件 <https://www.cnblogs.com/operationhome/p/10868498.html#更改配置文件>
一、什么是 Harbor

Harbor 是一个开源的云本地 registry 仓库,可以用于管理和储存 Docker 镜像。Harbor
支持在多个仓库直接进行复制镜像,提供用户管理和访问控制和活动审计。

Harbor 由以下服务组成(每个服务都由一个容器运行):

* nginx

* harbor-jobservice
* harbor-portal
* harbor-core

* registryctl
* harbor-db
* redis

* registry
* harbor-log
本文搭建的 Harbor 是基于 1.8.0,因为我最近准备写这个文档的时候,就发现 Harbor 最新版本为 1.8.0
了,本着追寻潮流,引领时尚的做人原则,就选择基于 1.8.0 来书写这篇文档,1.8.0 相对于之前的版本还是有比较多的更新的。

* 支持 OpenID Connect
* 支持机器人账户,可以将机器人账户设置只具有推送和拉取镜像的权限。
* 复制改进,扩展 Harbor-to-Harbor 的复制功能,增加了 Harbor --> Docker Hub 、Harbor---> Docker
Registry 、Harbor---> Huawei Registry 的功能。
* 支持定时清理任务,支持状态检查 API,增加了新的项目角色,不仅仅是开发人员和管理员,还有维护人员、访客。
* 引入 harbor.yml 替代 harbor.cfg,Docker Registry 升级到 2.7.1。
二、Harbor 安装

官方安装文档(2019.0514):
https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

官方文档的安装方法主要还是针对于 1.8.0 之前的版本,后续官方应该会对 1.8.0 版本进行更新文档。暂时没有针对新的版本的文档。

Harbor 的安装是基于 docker-compose ,通过构建多个容器来组成一个服务。

2.1、Harbor 安装环境

Harbor 的硬件需求

Resource Capacity Description
CPU minimal 2 CPU 4 CPU is preferred
Mem minimal 4GB 8GB is preferred
Disk minimal 40GB 160GB is preferred
软件需求

Software Version Description
Python version 2.7 or higher Note that you may have to install Python on Linux
distributions (Gentoo, Arch) that do not come with a Python interpreter
installed by default
Docker engine version 17.03.0-ce+ or higher For installation instructions,
please refer to:https://docs.docker.com/engine/installation/
<https://docs.docker.com/engine/installation/>
Docker Compose version 1.18.0 or higher For installation instructions, please
refer to:https://docs.docker.com/compose/install/
<https://docs.docker.com/compose/install/>
Openssl latest is preferred Generate certificate and keys for Harbor
端口需求

Port Protocol Description
443 HTTPS Harbor portal and core API will accept requests on this port for
https protocol
4443 HTTPS Connections to the Docker Content Trust service for Harbor, only
needed when Notary is enabled
80 HTTP Harbor portal and core API will accept requests on this port for http
protocol
目前,Harbor 使用的数据库仅支持 PostgreSQL 数据库。

2.2、Harbor安装

Harbor 有两种安装方法:

* 在线安装,在线安装需要网络,安装包非常小。
* 离线安装,离线安装,本地主机可以没有网络,安装包会比较大。
我们这里选择的是离线安装,避免因国内网络问题导致安装耗时比较久。

安装 docker-compose ,版本需要1.18.0+
curl -L
https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname
-s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x
/usr/local/bin/docker-compose
安装 Harbor
# 获取需要安装的版本 https://github.com/goharbor/harbor/releases # 下载 cd /opt/ && wget
下载版本链接 tar -xzf harbor-offline-installer* cd harbor # 编辑配置文件 harbor.yml vim
harbor.yml # 需要更改的参数 hostname: 192.168.15.170 # 绑定ip,不能使用127.0.0.1和localhost
http: # 监听端口,默认80,也就是我们 管理ui访问的端口 port: 80 harbor_admin_password: Harbor12345 #
设置管理员密码 ## 还可以设置启动 https,并指定证书,和指定数据目录 # 安装 ./install.sh
默认安装是不包含 Notary 和 Clair (用于漏洞扫描)。但是已经与他们集成了。我们可以使用

默认是使用 HTTP 协议,我们可以配置证书并使用 HTTPS 来访问 Harbor。

2.3 配置HTTPS

说实话我开始是抵触的,我不想去使用它,但是当我考虑到,我不可能暂停我所有已经运行的容器来修改配置,来解决 docker login
的问题,所有我只能老老实实的来配置 HTTPS ,这个烦人的 HTTPS。

官方配置文档: https://github.com/goharbor/harbor/blob/master/docs/configure_https.md

我们这里演示的是创建自己的 证书,实际生产环境中我们可以去阿里云或者其他云服务器厂商申请免费的 证书。

创建证书
# 创建存放证书的目录 mkdir -p /data/cert/ cd /data/cert/ # 创建自签名证书key文件 openssl genrsa
-out ca.key 4096 openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj
"/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=192.168.15.170" \ -key
ca.key \ -out ca.crt #CN 替换为你的仓库域名
修改配置
#配置 HTTPS 配置 https: # # https port for harbor, default is 443 port: 443 # #
The path of cert and key files for nginx certificate: /data/cert/ca.crt
private_key: /data/cert/ca.key
重新初始化 Harbor
# 暂停 docker-compose down -v prepare # 生成配置文件,根据 harbor.yml
配置生成docker-compose文件。 docker-compose up -d # 后台启动
客户端配置

将 Harbor 生成的证书 /data/cert/ca.crt 复制到 客户端的 /etc/docker/certs.d/仓库域名/。

然后重启docker 。
docker login 仓库域名
三、Harbor 的使用

3.1、登录Harbor并使用

登录网址 : ip,http://192.168.15.170 <http://192.168.15.170/>

默认的用户名和密码是:

用户名:admin
密码: Harbor12345

登录 Harbor 并创建一个私有项目 test 。

1.8.0版本使用界面图



1.7.5版本使用界面图



(不知道为啥上面有一坨绿色,难道是……,不可能的)。

本地登录 并且上传镜像
docker login 192.168.15.170 docker tag centos:latest
192.168.15.170/test/centos:latest # tag 名称= 仓库地址/项目名称/镜像名称:标记(版本号) docker push
192.168.15.170/test/centos:latest
下载镜像
docker pull 192.168.15.170/test/centos:latest
3.2、注意事项

在进行登录的过程中我们会遇到以下的问题,我们也给出了解决办法。
# 登录 docker login 192.168.15.170 # 登录报错 [root@localhost harbor]# docker login
192.168.15.170 Username: admin Password: Error response from daemon: Get
https://192.168.15.170/v2/: dial tcp 192.168.15.170:443: connect: connection
refused # 解决办法 ,官方的安装文档也是有写到这个问题 在 dockerd 启动参数中加上
--insecure-registry=192.168.15.170 编辑配置文件
/usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd://
--containerd=/run/containerd/containerd.sock --insecure-registry=192.168.15.170
四、Harbor 管理

4.1 启动暂停

我们可以使用 docker-compose 来管理 Harbor 的生命周期,以下命令的运行环境目录需要与 docker-compose.yml
是同一个目录。
# 暂停 Harbor docker-compose stop # 启动 Harbor docker-compose start # 更改
harbor.yml,1.8.0之前的版本配置文件是 harbor.cfg docker-compose down -v vim harbor.yml #
更改配置 prepare # 生成配置文件,根据 harbor.yml 配置生成docker-compose文件。 docker-compose up -d
# 删除 Harbor 的容器,将镜像数据和 Harbor的数据库文件保存在文件系统上。 docker-compose down -v # 彻底地删除
Harbor 的数据和镜像 rm -r /data/database rm -r /data/registry
默认情况下,Harbor 的数据保存在 /data/ 下,即使我们删除或者重建 Harbor 数据不会发生改变。并且 Harbor 使用了 rsyslog
来进行收集每个容器的日志,默认情况下,这些日志文件储存在主机的/var/loh/harbor/

更改配置文件

Harbor 默认的监听端口是 80(HTTP)和 443(HTTPS).

对于1.8.0版本

方法一 : 更改 harbor.yml 配置文件

在配置文件中有配置 监听端口 和使用具体协议的位置,我们根据各自需求进行设置。

注意,我们这边进行更改 docker-compose.yml 配置文件 来更改配置是无效的,因为当我们运行了 prepare docker-compose
文件就会被重写,所以更改docker-compose.yml 是无效的。

对于1.8.0之前的版本

对于 HTTP 协议。

方法一 :更改 docker-compose.yml 配置文件
proxy: image: goharbor/nginx-photon:v1.7.5 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: - 80:80 - 443:443 - 4443:4443 depends_on: - postgresql - registry - core
- portal - log logging: driver: "syslog" options: syslog-address:
"tcp://127.0.0.1:1514" tag: "proxy" # 将原有的内部监听80端口替换为 8888 proxy: image:
goharbor/nginx-photon:v1.7.5 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 - 443:443 - 4443:4443 depends_on: - postgresql - registry - core -
portal - log logging: driver: "syslog" options: syslog-address:
"tcp://127.0.0.1:1514" tag: "proxy"
方法二 更改 harbor.cfg ,将端口添加到参数 hostname上。
hostname = 192.168.15.170:8888
对于HTTPS 协议

跟配置 HTTP 协议一致。

更改了配置之后,我们需要重新部署 Harbor.
# 以下命令在 docker-compose.yml 文件所在目录中运行 ./prepare docker-compose up -d

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信