简介
什么是Harbor
Harbor是一个企业级的docker仓库管理工具,且基于Docker部署的开源工具。
Harbor包含权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
Harbor的功能
- 基于角色的访问控制(Role Based Access Control)
- 基于策略的镜像复制(Policy based image replication)
- 镜像的漏洞扫描(Vulnerability Scanning)
- AD/LDAP集成(LDAP/AD support)
- 镜像的删除和空间清理(Image deletion & garbage collection)
- 友好的管理UI(Graphical user portal)
- 审计日志(Audit logging)
- RESTful API
- 部署简单(Easy deployment)
Harbor的组件
Harbor在架构上主要组件:
- harbor-adminserver:harbor系统管理接口,可以修改系统配置以及获取系统信息。
- harbor-db:存储项目的元数据、用户、规则、复制策略等信息。
- harbor-jobservice:harbor里面主要是为了镜像仓库之前同步使用的。
- harbor-log:收集其他harbor的日志信息。rsyslogd
- harbor-ui:一个用户界面模块,用来管理registry。主要是前端的页面和后端CURD的接口。
- nginx:harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。是个nginx。nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,它将流量分发到后端的ui和正在docker镜像存储的docker registry。
- registry:存储docker images的服务,并且提供pull/push服务。harbor需要对image的访问进行访问控制,当client每次进行pull、push的时候,registry都需要client去token服务获取一个可用的token。
- redis:存储缓存信息
- webhook:当registry中的image状态发生变化的时候去记录更新日志、复制等操作。
网站信息
Harbor官网:https://goharbor.io/
Harbor文档:https://goharbor.io/docs/2.10.0/
Harbor下载:https://github.com/goharbor/harbor/releases
安装
下载Harbor
//下载harbor离线安装包
wget https://github.com/goharbor/harbor/releases/download/v2.8.1/harbor-offline-installer-v2.8.1.tgz
//解压
tar -xf harbor-offline-installer-v2.8.1.tgz -C /usr/local
配置Harbor
cp /usr/local/harbor/harbor.yml.tmpl /usr/local/harbor/harbor.yml
vim /usr/local/harbor/harbor.yml
hostname: 192.168.108.132
http:
port: 80
harbor_admin_password: Harbor12345
data_volume: /data/harbor/data/
安装Harbor
/usr/local/harbor/install.sh
账号/密码
Harbor的默认账号密码为:admin/Harbor12345
应用
用户管理
创建用户
- 创建用户
- 设置用户
用户授权
- 分配权限
选择用户,点击“设置为管理员”
- 取消权限
选择用户,点击“取消管理员”
管理用户
- 删除用户
选择用户,点击“删除”
- 重置密码
选择用户,点击“重置密码”
设置新密码
用户注册
- 允许用户自注册
项目管理
添加项目
- 新建项目
- 配置项目
注意:访问级别设置为公开,则表示无需Harbor账号密码即可访问。
分配项目
- 选择项目
- 添加成员
- 设置成员
搜索用户,并为其设置角色
管理项目
- 删除项目
选择项目,点击“删除”
- 添加标签
- 设为公开
- 镜像扫描
- 安全部署
- 仓库空间
选择仓库,点击“修改”,然后指定仓库大小,“-1”表示不设限制
仓库管理
应用仓库
注意:本地安装的Harbor没有开始HTTPS协议,所以在使用HTTP协议访问时需要加上端口。
- 登录需要添加端口
- 打标签需要添加端口
- 推送镜像需要添加端口
- 从仓库拉取镜像需要添加端口
主机登录仓库
- 编辑
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://11777p0c.mirror.aliyuncs.com",
"http://192.168.108.128:80"
],
"insecure-registries": ["192.168.108.128:80"],
"data-root": "/data/docker",
"dns": [
"8.8.8.8",
"114.114.114.114"
],
"log-driver":"json-file",
"log-opts": {"max-size":"100m"}
}
EOF
systemctl daemon-reload
systemctl restart docker
- 登录仓库
docker login --username=wangmingqu --password=Whaty@123 http://192.168.108.128:80
推送镜像到操作
- 登录仓库
docker login --username=wangmingqu --password=Whaty@123 http://192.168.108.128:80
- 镜像标签
#格式:
docker tag SOURCE_IMAGE[:TAG] 192.168.108.128/project/REPOSITORY[:TAG]
docker tag SOURCE_IMAGE[:TAG] 192.168.108.128[:PORT]/project/REPOSITORY[:TAG]
#举例:
docker tag redis:6.0 192.168.108.128:80/project/redis:6.0
- 推送镜像
#格式:
docker push 192.168.108.128:80/project/REPOSITORY[:TAG]
docker push 192.168.108.128:80[:PORT]/project/REPOSITORY[:TAG]
#举例
docker push 192.168.108.128:80/project/redis:6.0
从仓库拉取镜像
docker pull 192.168.108.128:80/project/redis@sha256:f7e09e24712bd2d944032fedf94e3a8f9ef44d7b63ea70c149396afc0a9c1abd