一、Harbor 简介
1.1、简介
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。
Harbor 以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose
来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml
。
1.2、Harbor 的特性
- 1、基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
- 2、基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步)。
- 3、支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。
- 4、镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
- 5、图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
- 6、审计管理:所有针对镜 像仓库的操作都可以被记录追溯,用于审计管理。
- 7、支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
- 8、Harbor 和 docker registry 的关系:Harbor 实质上是对 docker registry 做了封装,扩展了自己的业务模板。
1.3、Harbor的构成
Harbor 在架构上主要有 Proxy、Registry
、Core services
、Database(Harbor-db)
、Log collector(Harbor-log)
、Job services
六个组件。
Docker Harbor 私有仓库操作的过程:
1、所有的请求或认为的操作都会首先交给 proxy(反向代理)。
2、proxy 会先将请求转发给后端Core services,Core services 中包含 UI、token(身份验证服务)、webhook(网站的一些服务功能)。
3、转发给registry(镜像存储),若需要下载镜像等权限操作,需要通过 Core services 中的 token 令牌的身份验证服务才行。
4、每一次下载和上传都产生操作记录,生成日志,保存至 database 中。
5、database 记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作。
- Proxy: 是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。
- Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。 Core services: Harbor的核心功能,
- UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
- WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。
- Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。
- Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。
- Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
- Log collector(harbor-log): 负责收集其他组件的日志到一个地方。
二、部署Harbor
2.1、部署 Docker-Compose 服务
2.2、部署 Harbor 服务
2.2.1下载或上传 Harbor 安装程序
# 下载harbor离线安装包
wget -c https://github.com/goharbor/harbor/releases/download/v2.8.1/harbor-offline-installer-v2.8.1.tgz
# 解压
tar -zxvf harbor-offline-installer-v2.8.1.tgz -C /opt/module
2.3、修改Habor配置文件 harbor.cfg
cp harbor.yml.tmpl harbor.yml
//修改配置文件中hostname内容
vim harbor.yml
....
hostname: 192.168.10.130 #修改为当前主机的IP或域名
# http related config
http:
port: 80
#https: #注释掉https服务
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# internal_tls:
# enabled: true
# dir: /etc/harbor/tls/internal
harbor_admin_password: Harbor12345 --指定密码
2.4、安装 Harbor
./install.sh
2.5、登录harbor的web平台
默认用户名:admin
,默认密码:Harbor12345
2.6、登录成功界面
2.7、推送镜像至 Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1
或者:
docker login 192.168.10.130
Username: admin
Password:
Error response from daemon: Get "https://192.168.10.130/v2/": dial tcp 192.168.2.50:443: connect: connection refused
解决登录失败方法如下:
默认访问 Docker 仓库使用 443 端口,要修改为 80 端口仓库地址。
# 重启harbor服务:
docker-compose stop && docker-compose start
下载镜像并修改 tag:
docker pull nginx
docker tag nginx:latest 192.168.10.130/library/nginx:v1
推送镜像到 library 项目:
docker push 192.168.10.130/library/nginx:v1
2.8、Harbor 启停
# 进入 Harbor 安装目录
cd harbor
# 关闭 Harbor
docker-compose down
# 开启 Harbor
docker-compose up -d
# 查看服务状态
docker-compose ps
# 重启 Harbor
docker-compose restart
# 查看服务日志
docker-compose logs
# 查看某个具体服务的日志,例如 nginx
docker-compose logs nginx
# 停止某个具体服务
docker-compose stop nginx
# 启动某个具体服务
docker-compose start nginx
评论