Harbor 是一个开源的 企业级容器镜像仓库管理平台,由 VMware 中国团队开发并捐赠给 CNCF 托管。

其在 Docker Registry 的基础上提供了丰富的管理策略、基于角色的访问控制、多租户支持……等企业所需功能,几乎是私有云和本地容器镜像管理的首选解决方案。

1. 安装准备

1.1. 环境需求

硬件准备

准备两台 Linux 服务器,具体分工如下:

名称地址角色备注
仓库服务器192.168.50.75服务端用于部署 Harbor
演示服务器192.168.50.92客户端演示使用 Harbor

硬件要求

仓库服务器 需运行多个不同类型的容器,因此需要较高的性能,官方建议如下:

ResourceMinimumRecommended
CPU2 CPU4 CPU
Mem4 GB8 GB
Disk40 GB160 GB

软件要求

SoftwareVersionDescription
Docker EngineVersion > 20.10Docker Engine Installation
Docker ComposeDocker compose > 2.3Docker Compose is part of Docker Engine
OpenSSLLatest (optional)Used to generate certificate and keys for Harbor

两台服务器分别需预安装以下软件:

仓库服务器:Docker Engine , Docker Compose, openssl

演示服务器:Docker Engine, openssl

2. 文件下载

Harbor 提供了两种安装程序:一种是在线安装程序,一种是离线安装程序

在线安装程序:执行时需从公共仓库下载镜像。

离线安装程序:文件已包含所有需用到的镜像。

下载地址:https://github.com/goharbor/harbor/releases

2.1. 下载

我下载的是离线安装版,当前最新版本是 2.13.2:

wget https://github.com/goharbor/harbor/releases/download/v2.13.2/harbor-offline-installer-v2.13.2.tgz

2.2. 解压

# 解压文件
tar -xzvf harbor-offline-installer-v2.13.2.tgz

# 复制解压好的文件到 /usr/local/ 目录
sudo cp -r harbor /usr/local/

解压后将得到如下几个文件:

common.sh				# 安装检查程序
harbor.v2.13.2.tar.gz	# 预编译的镜像包
harbor.yml.tmpl			# 临时配置文件
install.sh				# 安装程序
LICENSE					# 开源协议
prepare					# 准备程序

3. 仓库安装

http 方式相对简单,因此这里仅演示支持 HTTPS 安装方式。

如果是测试环境,可使用自签名的根证书和服务器证书,生产环境请使用正式证书。

关于如何生成自签名证书,可参考 Docker Registry 安装:4.2.1. 准备证书 ,这里不再赘述。

3.1. 复制文件

cd /usr/local/harbor

sudo cp harbor.yml.tmpl harbor.yml

3.2. 修改配置

sudo vim harbor.yml

关于配置,主要修改以下几项:

① 主机名(域名);② 指定 nginx 用到的证书和私钥;③ 管理员密码;④ 数据库密码

# ① 主机名(域名)或 IP,不能配置为 localhost 或 127.0.0.1
hostname: www.igeeksky.com

# ② 如不想使用 https,可以将以下几行全部注释掉。
https:
  port: 443
  # 指定之前已经提前准备好的证书和私钥,用于 nginx
  certificate: /usr/local/etc/ssl/certs/igeeksky.crt
  private_key: /usr/local/etc/ssl/private/igeeksky.key

# ③ 管理员初始密码,默认为 Harbor12345
# 为了安全,我这里改为较复杂的初始密码
# 安装成功后,可在 UI界面修改
# harbor_admin_password: Harbor12345
harbor_admin_password: ^f!g4r34gh

# ④ harbor 数据库配置,密码默认为 root123
database:
  # 为了安全,改为较复杂的数据库密码
  # password: root123
  password: ^5gf&!ghg^!

3.3. 根证书

Harbor 有多个组件,组件之间内部通信默认启用 HTTPS

运行 prepare 时,将自动创建组件之间内部通信所需的自签名证书和私钥(不包括 nginx)。

如果之前已经创建了证书颁发机构的根证书,那么可以将根证书和对应私钥复制到 /data/secret/tls/ 目录,并重命名为 harbor_internal_ca.keyharbor_internal_ca.crt

当运行 prepare 时,将自动检查这两个文件是否存在。如果不存在,会先创建自签名的根证书和对应私钥,然后再创建组件服务的自签名证书和对应私钥。

因此,这一步是可选的。

# 创建目录:用于放置证书颁发机构的根证书和私钥
sudo mkdir -p /data/secret/tls
# 复制根证书和私钥到 internal 目录
# 作用是使用指定的 ca 来生成组件服务内部通信所需的安全证书
sudo cp /home/patrick/harbor/ca.key /data/secret/tls/harbor_internal_ca.key
sudo cp /home/patrick/harbor/ca.crt /data/secret/tls/harbor_internal_ca.crt

3.4. 准备安装

# 运行 prepare,准备安装
sudo ./prepare

如果成功执行,将会创建内部通信所需的相关证书,并生成 docker-compose.yml 及其它组件配置。

3.5. 正式安装

sudo ./install.sh

如果安装成功,将会自动启动,并显示信息如下:

[Step 5]: starting Harbor ...
[+] Running 10/10
 √ Network harbor_harbor        Created                                           
 √ Container harbor-log         Started                                           
 √ Container harbor-db          Started                                           
 √ Container registryctl        Started                                           
 √ Container harbor-portal      Started                                           
 √ Container registry           Started                                           
 √ Container redis              Started                                           
 √ Container harbor-core        Started                                           
 √ Container harbor-jobservice  Started                                           
 √ Container nginx              Started                                           
√ ----Harbor has been installed and started successfully.----

4. 简单使用

以下操作在演示服务器进行。

4.1. 修改 hosts

因为是内网测试,且又是自签名证书,所以还需在客户端机器添加域名解析。

# 编辑 hosts 文件
sudo vim /etc/hosts

# 将域名 www.igeeksky.com 解析到 `192.168.50.75`
192.168.50.75 www.igeeksky.com

4.2. 创建项目

打开浏览器,输入域名,登录 Harbor 之后,依此点击 “项目” → “新建项目”。

create-project

4.3. 上传镜像

推送镜像

# 下载镜像:hello-world
docker pull hello-world

# 增加标签
docker tag hello-world:latest www.igeeksky.com/devops/hello-world:v1

# 登录
docker login www.igeeksky.com

# 推送镜像
docker push www.igeeksky.com/devops/hello-world:v1

查看镜像

harbor-image-list

可以看到,新推送的镜像已经存在于 devops 这个项目之中。

5. 总结

Harbor 是将众多开源组件进行整合,如registrynginxredisPostgreSQL …… 等,并针对企业应用进行了功能扩展,然后打包成一个功能强大、操作友好、安全可靠的镜像仓库管理平台。

另,Harbor 还可通过 helmKubernetes 上发布,以实现高可用。

这篇文章仅简单介绍了基本安装过程,更多信息还请参阅官方文档:https://goharbor.io/