私有仓库 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 架构组件

私有仓库 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/

私有仓库 Harbor 的搭建

【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个容器

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

【7】验证
// http://192.168.66.138 的管理页面
// 默认的管理员用户名和密码是 admin/Harbor12345
// 在网页harbor上新建一个私有项目myproject,用来测试上传、下载镜像

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

在网页harbor上新建一个私有项目myproject,用来测试上传、下载镜像

私有仓库 Harbor 的搭建

【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

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

在UI界面可以看到刚刚上传的镜像

私有仓库 Harbor 的搭建

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

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

【2】下载私有仓库
// 下载私有仓库的镜像
docker pull 192.168.66.138/myproject/cirros:v1

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

【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

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

【4】验证
// 在 harbor 界面验证镜像是否上传到私有仓库。

私有仓库 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

私有仓库 Harbor 的搭建

【2】修改参数文件
cd /usr/local/harbor
 vim harbor.cfg    // 修改配置参看实际需求

【3】重新加载配置文件,重启服务
//目录下有prepare脚本,下一步执行
./prepare 
systemctl restart docker       // 重启docker服务
docker-compose up -d           // 启动容器服务

私有仓库 Harbor 的搭建

【4】去harbor界面,创建新用户:test-wanglu,稍后使用

私有仓库 Harbor 的搭建

私有仓库 Harbor 的搭建

在客户端,使用新用户远程登录harbor,来进行下载和上传镜像

【1】使用新用户远程登录harbor,来进行下载和上传镜像
// 首先退出已登陆的账号
docker logout http://192.168.66.138

// 使用新的账户登录
 docker login http://192.168.66.138

私有仓库 Harbor 的搭建

【2】下载 harbor 仓库内的镜像
 docker pull 192.168.66.138/myproject/cirros:v1

私有仓库 Harbor 的搭建

【3】 上传镜像
// 改成私有仓库的专有标签
docker tag nginx:latest 192.168.66.138/myproject/nginx:v1

// 上传镜像到私有仓库
docker push 192.168.66.138/myproject/nginx:v1

私有仓库 Harbor 的搭建

查看UI界面显示上传成功!

私有仓库 Harbor 的搭建

相关推荐