一、概述
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 仓库服务。它以Docker公司开源的Registry为基础,提供了管理 UI。基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志 (Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。
Harbor 的优势
1、基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限。
2、基于镜像的复制策略: 镜像可以在多个 Harbor 实例之间进行复制(同步)。适用于负载平衡、高可用性、多数据中心、混合和多云场景。
3、支持 LDAP / AD:Harbor 与现有的企业 LDAP / ADA 集成,用于用户认证和管理。
4、图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。
5、图形 UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
6、审计: 对存储库的所有操作都进行记录。
7、RESTful API:用于大多数管理操作的 RESTful API,易于与外部系统集成。
二、Harbor 架构构成
1、Proxy:Harbor 的 Registry、UI、token 等服务。通过一个前置的反向代理统一接收浏览器Docker 客户端的请求,并将请求转发给后端不同的服务。
2、Registry:负责储存Docker镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个 token服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的token,Registry会通过公钥对 token 进行解密验证。
3、Core services 这是 Harbor 的核心功能,主要提供以下服务:
①、UI(Harbor-ui):提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
②、Webhook:为了及时获取 registry 上image状态变化的情况,在Registry上配置webhook,把状态变化传递给UI模块。
③、Token 服务:负责根据用户权限给每个Docker push/pull命令签发token.Docker客户端向 Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向 Registry进行请求。
4、Database(Harbor-db):为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
5、Log collector(Harbor-log):为了帮助监控 Harbor 运行,负责收集其他组件的log,供日后进行分析。
三、准备工作
1、三台主机提前安装docker-ce
2、master、slave安装docker-compose
3、关闭防火墙
4、最好是有火狐浏览器(测试的时候用其他浏览器可能会报错)
四、安装部署
1、搭建nfs服务端
mkdir -p /data/nfs 创建共享目录
yum -y install nfs-utils rpcbind 安装软件
cat <<END>> /etc/exports
/data/nfs 192.168.77.0/24(rw,no_root_squash) 映射
systemctl start rpcbind 启动软件
systemctl start nfs
主从服务器操作
yum -y install nfs-utils rpcbind
mkdir -p /data/storage
mount 192.168.77.16:/data/nfs /data/storage
在nfs端操作
准备共享容器
docker pull redis:alpine
docker run -dit --name redis_test -p 6379:6379 redis:alpinedocker pull postgres
docker run -dit --name postgres_test -p 5432:5432 -e POSTGRES_PASSWORD=123123 postgresdocker pull mysql:5.6
docker run -dit --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8docker rename postgres_test clair_db
docker rename mysql_test harbor_db
docker rename redis_test session
2、Harbor部署
tar xf harbor-offline-installer-v1.6.1.tgz
cd harbor/
tree ha
vim ha/initial-registry.sql 修改需要导入的数据库文件,不然会报错
CREATE DATABASE registry CHARACTER SET utf8;
yum -y install mysql
mysql -uroot -p123123 -h192.168.77.16 -P3306
source ha/initial-registry.sql
vim ha/docker-compose.yml
19行 - /data/storage:/storage:z #修改成我们的nfs共享目录
vim harbor.cfg
7 hostname = 192.168.77.123
sh install.sh
出现以下字段就表示成功了
再查看容器确认一下都是UP
登录镜像仓库,默认用户是admin 密码是Harbor12345
五、测试
创建一个新项目myproject-crushlinux
docker login -u admin -p Harbor12345 http://127.0.0.1 登录仓库 默认是80端口
docker pull buysbox 下载一个小一点的镜像测试
docker tag busybox 127.0.0.1/myproject-crushlinux/busybox:syh 打标签
docker push 127.0.0.1/myproject-crushlinux/busybox:syh 上传镜像
到仓库查看
docker logout 192.168.77.123 退出仓库
六、客户端上传镜像
vim /usr/lib/systemd/system/docker.service
13行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.77.123
重启后登录
systemctl daemon-reload
systemctl restart docker
docker login -u admin -p Harbor12345 192.168.77.123
docker pull busybox 下载一个小一点的镜像进行测试
docker tag busybox 192.168.77.123/myproject-crushlinux/busybox:syh2
docker push 192.168.77.123/myproject-crushlinux/busybox:syh2
查看
七、Harbor 日常操作管理
1、通过 Harbor Web 创建项目
点击“+项目”时按规范填写项目名称。项目级别:私有即不勾选(勾选后会变为"公开")。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker hub 一致。
2、创建 Harbor 用户
①、创建用户并分配权限
系统管理->用户管理->创建用户,填写用户名为“crushlinux-user01”,邮箱为 crushlinux-user01@crushlinux.cn,全名为“harbor admin”,密码为“A123a456”,注释为“管理员”。
②、添加项目成员
项目-> myproject-crushlinux->成员->+成员,填写上述创建的用户并分配角色为“项目管理员”。
可对成员角色进行变更或者删除操作。
以上就是Harbor企业镜像仓库部署
如有错误欢迎各位大佬批评指正,我们共同进步