私有仓库 Harbor 的搭建
私有仓库 Harbor 的搭建
一、Harbor简介
虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
Harbor是由VMware公司开源的企业级的Docker Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。
它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP 集成,日志审核等功能,完全的支持中文。
二、Harbor 的主要功能
1.基于角色的访问控制:
用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
2.基于镜像的复制策略:
镜像可以在多个Registry实例中复制(可以将仓库中的镜像同步到远程的Harbor,类似于MySQL主从同步功能),尤其适合于负载均衡,高可用,混合云和多云的场景。
3.图形化用户界面:
用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
4.支持 AD/LDAP:
Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
5.镜像删除和垃圾回收:
Harbor支持在Web删除镜像,回收无用的镜像,释放磁盘空间。image可以被删除并且回收image占用的空间。
6.审计管理:
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
7.RESTful API:
RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
8.部署简单:
提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
Harbor 的所有组件都在 Docker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
注意: 由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 > = 1.10.0 docker-compose >= 1.6.0
三、Harbor 架构组件
1. Proxy:对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务;
2. UI(Core Service):对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能:
Registry:对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token。
UI:一个web管理页面ui;
API:Harbor暴露的API服务;
Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现;
Token服务(上图中未体现):负责根据用户在每个project中的role来为每一个docker push/pull命令issuing 一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建 token。
3. Admin Service:对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置;
4. Job Sevice:对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log;
5. Log Collector:对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起;
6. Volnerability Scanning:对应启动组件clair。负责镜像扫描
7. Notary:对应启动组件notary。负责镜像认证
8. DB:对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据。
四、Harbor 部署
4.1、环境准备
// harbor 服务端,用于搭建私有仓库
192.168.66.138 docker-ce、docker-compose(必须安装)、Harbor
// client 客户端,用于远程访问
192.168.66.129 docker-ce
4.2、在harbor 服务端(安装compose 和 harbor)
【1】先部署Docker,网络优化,镜像加速 【2】部署 compose//在线下载docker-compose包 curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose cp -p docker-compose /usr/local/bin/ docker-compose -v //可以看到版本信息 【3】 安装 Harbot程序 // 在线下载harbor安装包 wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz // 解压 tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
【4】配置 Harbot 参数文件 vim /usr/local/harbor/harbor.cfg hostname = 192.168.66.138 //改为自己服务端本地的IP地址 【5】启动 Harbot sh /usr/local/harbor/install.sh 【6】查看 Harbot 启动镜像 // 查看镜像 docker images // 查看容器 docker ps -a // 也可用docker-compose ps查看容器状态,但是需要在/usr/local/harbor工作目录下执行,不然会报错。 docker-compose ps // 可以看到安装了7个容器
【7】验证 // http://192.168.66.138 的管理页面 // 默认的管理员用户名和密码是 admin/Harbor12345 // 在网页harbor上新建一个私有项目myproject,用来测试上传、下载镜像
在网页harbor上新建一个私有项目myproject,用来测试上传、下载镜像
【8】登录harbor的字符界面 docker login -u admin -p Harbor12345 http://127.0.0.1/ // 下载镜像进行测试 docker pull cirros // 镜像打标签 docker tag cirros 127.0.0.1/myproject/cirros:v1 // 上传镜像到Harbor docker push 127.0.0.1/myproject/cirros:v1
在UI界面可以看到刚刚上传的镜像
4.3、客户端远程访问管理 harbor
// 先部署Docker,网络优化,镜像加速 【1】必须要先指定私有仓库的地址 vim /usr/lib/systemd/system/docker.service // 14行修改添加,将私有仓库地址添加上去。 ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.66.138 --containerd=/run/containerd/containerd.sock // 重启服务 systemctl daemon-reload systemctl restart docker.service // 远程就可以登录 docker login -u admin -p Harbor12345 http://192.168.66.138
【2】下载私有仓库 // 下载私有仓库的镜像 docker pull 192.168.66.138/myproject/cirros:v1
【3】上传镜像到私有仓库 // 先从官方仓库下载nginx镜像 docker pull nginx // 给nginx镜像打标签 docker tag nginx:latest 192.168.66.138/myproject/nginx:v2 // 上传镜像到私有仓库 docker push 192.168.66.138/myproject/nginx:v2
【4】验证 // 在 harbor 界面验证镜像是否上传到私有仓库。
总结
在搭建过程中,要注意客户端远程登录私有仓库时,必须先在docker.service文件里指明仓库地址,然后加载并重启docker,之后才能登录。
五、Harbor 管理维护
5.1、修改 Harbor.cfg 配置文件
// 更改 Harbour 的配置文件时,请先停止现有的 Harbour 实例并更新 Harbor.cfg;然
后运行 prepare 脚本来填充配置;最后重新创建并启动 Harbour 的实例。
// 在 Harbor服务器上修改 【1】 关闭所有容器 cd /usr/local/harbor docker-compose down -v
【2】修改参数文件 cd /usr/local/harbor vim harbor.cfg // 修改配置参看实际需求 【3】重新加载配置文件,重启服务 //目录下有prepare脚本,下一步执行 ./prepare systemctl restart docker // 重启docker服务 docker-compose up -d // 启动容器服务
【4】去harbor界面,创建新用户:test-wanglu,稍后使用
在客户端,使用新用户远程登录harbor,来进行下载和上传镜像
【1】使用新用户远程登录harbor,来进行下载和上传镜像 // 首先退出已登陆的账号 docker logout http://192.168.66.138 // 使用新的账户登录 docker login http://192.168.66.138
【2】下载 harbor 仓库内的镜像 docker pull 192.168.66.138/myproject/cirros:v1
【3】 上传镜像 // 改成私有仓库的专有标签 docker tag nginx:latest 192.168.66.138/myproject/nginx:v1 // 上传镜像到私有仓库 docker push 192.168.66.138/myproject/nginx:v1
查看UI界面显示上传成功!
相关推荐
王道革 2020-11-25
魅惑青花瓷 2020-11-11
lihongtai 2020-11-09
TaoTaoFu 2020-11-06
liaochaowu 2020-11-16
ChlatZed 2020-11-11
xysoul 2020-11-03
changecan 2020-09-22
newisI 2020-09-01
链块学院 2020-09-09
lihy0 2020-09-07
fearlessxjdx 2020-09-04
ChlatZed 2020-08-23
changecan 2020-11-19
bwyyziq 2020-11-22
pigsmall 2020-11-19
helloWorldAndYou 2020-11-16
nginxs 2020-11-14
红石丶 2020-11-13