安装Harbor
# 1. 安装Harbor
打开Harbor的Github Release地址 (opens new window),下载离线部署包。

服务器创建目录,/root/soft/docker
mkdir -p /root/soft/docker
上传包到目录下。

解压文件到当前目录
tar -zxvf harbor-offline-installer-v2.12.2.tgz
进入解压后的目录,将harbor.yml.tmpl文件重命名为harbor.yml
mv harbor.yml.tmpl harbor.yml

修改harbor.yml文件
#服务地址
hostname: 192.168.127.135
#http访问端口
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https配置,如果不需要开启,就注释掉
#https:
# https port for harbor, default is 443
#port: 443
# The path of cert and key files for nginx
#certificate: /your/certificate/path
#private_key: /your/private/key/path
# enable strong ssl ciphers (default: false)
# strong_ssl_ciphers: false
#管理员密码
harbor_admin_password: Harbor12345
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
保存文件,执行install.sh,开始安装。

安装完成后,会自动启动服务。
用浏览器访问80端口,输入用户名:admin,输入上面配置好的密码


# 2. docker使用仓库
# 2.1 docker登录harbor
在docker推送或拉取非公开镜像前,需要先使用docker login命令登录harbor。
docker login -u admin -p Harbor12345 http://192.168.127.135:80

返回http: server gave HTTP response to HTTPS client的错误信息。这是因为docker客户端默认使用的是https,而我们搭建harbor时,没有开启https。
解决方案有两种
- harbor配置ssl证书,并开启https访问
- 修改docker客户端,针对我们的harbor访问地址开启http
这里我们选择修改docker客户端的方式。
在/etc/docker目录下,新增daemon.json配置文件,将harbor的访问地址添加进去
{
"insecure-registries":["192.168.127.135:80"]
}
2
3

保存后,重启docker。
systemctl restart docker
再次执行登录命令。

登录成功后,docker会将登录信息写入当前用户目录下的.docker/config.json文件中,以后docker重启或者服务器重启,都不再需要再次执行docker login命令了。

# 2.2 测试推送
harbor的项目有两种访问级别,公开和私有。当设置为公开时,所有人都可以拉取镜像。设置为私有时,只有指定成员的用户才能访问。


可以使用添加用户的方式,来指定项目成员。

harbor的角色权限
| 操作 | 项目管理员 | 维护人员 | 开发者 | 访客 | 受限访客 |
|---|---|---|---|---|---|
| 管理项目成员(添加/删除) | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 | ❌ 否 |
| 管理仓库(创建/删除) | ✅ 是 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| 推送(Push)镜像 | ✅ 是 | ✅ 是 | ✅ 是 | ❌ 否 | ❌ 否 |
| 拉取(Pull)镜像 | ✅ 是 | ✅ 是 | ✅ 是 | ✅ 是 | ✅ 仅能访问公开项目 |
| 删除镜像 | ✅ 是 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| 管理复制规则 | ✅ 是 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| 管理漏洞扫描 | ✅ 是 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 |
| 管理项目配额 | ✅ 是 | ❌ 否 | ❌ 否 | ❌ 否 | ❌ 否 |
harbor安装好后,默认有一个公开的项目library,我们使用另一个安装好docker的服务器,测试一下推送。
先下载一个测试的镜像
docker pull hello-world

然后推送镜像
docker push 192.168.127.135:80/library/hello-world:test

可以看到推送成功了。

# 2.3 测试拉取
使用docker pull来拉取镜像
docker pull 192.168.127.135:80/library/hello-world:test


可以看到,镜像下载数由0变成了1。