Harbor 是一个开源的 企业级容器镜像仓库管理平台,由 VMware 中国团队开发并捐赠给 CNCF 托管。
其在 Docker Registry 的基础上提供了丰富的管理策略、基于角色的访问控制、多租户支持……等企业所需功能,几乎是私有云和本地容器镜像管理的首选解决方案。
1. 安装准备
1.1. 环境需求
硬件准备:
准备两台 Linux 服务器,具体分工如下:
| 名称 | 地址 | 角色 | 备注 |
|---|---|---|---|
| 仓库服务器 | 192.168.50.75 | 服务端 | 用于部署 Harbor |
| 演示服务器 | 192.168.50.92 | 客户端 | 演示使用 Harbor |
硬件要求:
仓库服务器 需运行多个不同类型的容器,因此需要较高的性能,官方建议如下:
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 CPU | 4 CPU |
| Mem | 4 GB | 8 GB |
| Disk | 40 GB | 160 GB |
软件要求:
| Software | Version | Description |
|---|---|---|
| Docker Engine | Version > 20.10 | Docker Engine Installation |
| Docker Compose | Docker compose > 2.3 | Docker Compose is part of Docker Engine |
| OpenSSL | Latest (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.key 和 harbor_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 之后,依此点击 “项目” → “新建项目”。

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
查看镜像:

可以看到,新推送的镜像已经存在于 devops 这个项目之中。
5. 总结
Harbor 是将众多开源组件进行整合,如registry、nginx、redis、PostgreSQL …… 等,并针对企业应用进行了功能扩展,然后打包成一个功能强大、操作友好、安全可靠的镜像仓库管理平台。
另,Harbor 还可通过 helm 在 Kubernetes 上发布,以实现高可用。
这篇文章仅简单介绍了基本安装过程,更多信息还请参阅官方文档:https://goharbor.io/