构建docker高可用私有仓库基于Harbor开源系统

简介:

操作系统及相关软件版本说明:

测试服务器IP地址:

IP 1 = 192.168.85.158,简称A仓库

IP 2 = 192.168.85.157,简称B仓库  

一、Harbor项目介绍

1、Harbor来源

VMware公司最近开源了企业级Registry项目Harbor,其的目标是帮助用户迅速搭建一个企业级的Docker registry 服务。

它以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。

 

2、架构介绍

1) 主要组件

Harbor在架构上主要由五个组件构成:

 ◆Proxy:Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。

 ◆Registry: 负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。

 ◆Core services: 这是Harbor的核心功能,主要提供以下服务:

 ◇UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。

 ◇webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。

 ◇token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。

 ◆Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。

 ◆Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

各个组件之间的关系如下图所示:

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

2) 实现

Harbor的每个组件都是以Docker容器的形式构建的,所以使用Docker Compose来对它进行部署。

用于部署Harbor的Docker Compose 模板位于 /Deployer/docker-compose.yml. 打开这个模板文件,会发现Harbor由5个容器组成:

 ◆proxy: 由Nginx 服务器构成的反向代理。

 ◆registry:由Docker官方的开源registry 镜像构成的容器实例。

 ◆ui: 即架构中的core services, 构成此容器的代码是Harbor项目的主体。

 ◆mysql: 由官方MySql镜像构成的数据库容器。

 ◆log: 运行着rsyslogd的容器,通过log-driver的形式收集其他容器的日志。

这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。

  

二、安装Docker Compose

1、安装docker-compose方法一

$ sudo –i

# curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

 

# docker-compose --version docker-compose version: 1.8.1

 

这样便安装好了docker-compose。

 三、安装2台Harbor

以下操作,都是2台服务器同时操作

实现原理图:

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

1、下载harbor安装包 

在线包:

https://github.com/vmware/harbor/releases/download/0.4.5/harbor-online-installer-0.4.5.tgz

离线包:

https://github.com/vmware/harbor/releases/download/0.4.5/harbor-offline-installer-0.4.5.tgz

 

2、解压、配置、安装harbor

在安装harbor之前,需要修改/data/harbor/harbor.cfg中的配置参数,然后执行install.sh脚本来生成harbor所有容器的配置文件及启动harbor 

在文件harbor.cfg中,需要配置的参数如下: 

hostname:私有仓库的主机名,可以是IP地址,也可以是域名。这里是配置的域名

hostname = 192.168.85.157

ui_url_protocol:用户访问私仓时使用的协议,默认时http,也可配置成https;

ui_url_protocol = http 

邮箱账号配置

#Email account settings for sending out password resetting emails.

email_server = smtp.xxxxx.com

email_server_port = 25

email_username = channel@xxxxx.com

email_password = xxxxf04

email_from = channel <channel@xxxxx.com>

email_ssl = false 

harbor_admin_password:harbor的管理员账户密码,默认密码是: Harbor12345  用户名是:admin 

其他配置参数可以参考:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md 


3、安装启动harbor

# ./install.sh

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

  

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

用docker-compose ps查看下,所有容器是否都启动

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

  

四、创建docker harbor主主复制                                            

1、在A仓库创建镜像同步策略

http://192.168.85.158

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

使用用户名/密码: admin/ Harbor12345 登陆

登陆后,新建项目hlg_web

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

点击新增策略,填写相关对端harbor信息,最后点击测试连接

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

返回测试连接目标成功,表示创建成功

点击完成,即可看到

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

2、在A仓库中上传镜像到同步项目中并验证

以下在A仓库机器执行

# docker login -u admin -p Harbor12345  192.168.85.158

Login Succeeded 

# docker tag c8c29d842c09 192.168.85.158/hlg_web/nginx:1.9

注:c8c29d842c09为nginx的images id 

# docker push 192.168.85.158/hlg_web/nginx:1.9

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

  

然后分别在A仓库、B仓库页面,进行查看验证

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维


注:在push上传时,必须要有对应的项目名称,才能push成功

然后登陆B仓库,查看配置的复制策略,是否同步过来

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

从主面板看,日志也给同步过来了

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

 3、在B仓库中上传镜像验证同步

按照上面的方法,反过来,在192.168.85.157上创建策略

项目—项目名称—点开

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

点击“复制”—“新增策略”

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

然后我们在B仓库上上传镜像到hlg_web中

# docker tag 942fd5fd357e 192.168.85.157/hlg_web/swarm

# docker push 192.168.85.157/hlg_web/swarm

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

登陆B仓库管理系统

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

日志显示,已经上传成功。然后在到对应的项目中查看

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

 

然后在到A仓库中查看镜像是否一样被同步过来

构建docker高可用私有仓库基于Harbor开源系统 - zhm - 合肥运维

    

五、安装过程FAQ

1、非https登陆失败

# docker login -u admin -p Pty_registry123 172.16.73.50

Error response from daemon: Get https://172.16.73.50/v1/users/: dial tcp 172.16.73.50:443: getsockopt: connection refused

 

编辑 /etc/default/docker 增加如下内容

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 172.16.73.50"

然后停止docker-compose执行

docker-compose stop

重启docker执行

service docker restart

最后启动docker-compose

docker-compose start

 

以上是利用harbor,搭建的docker私有仓库主主同步方案。

本文转自 msj0905 51CTO博客,原文链接:http://blog.51cto.com/sky66/1934011



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
Kubernetes 监控 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【5月更文挑战第4天】在现代软件开发中,微服务架构已成为实现可扩展、灵活且独立部署服务的流行解决方案。本文将探讨如何利用Docker容器化技术和Kubernetes容器编排平台来构建一个高效的微服务系统。我们将分析Docker和Kubernetes的核心优势,并指导读者如何通过这些工具优化微服务部署、管理和扩展过程。文章还将涉及监控和日志管理策略,以确保系统的健壮性和可靠性。
|
6天前
|
机器学习/深度学习 运维 持续交付
构建高效自动化运维体系:Ansible与Docker的完美结合构建高效机器学习模型的五大技巧
【4月更文挑战第30天】 在当今快速发展的云计算和微服务架构时代,自动化运维已成为维持系统稳定性和提高效率的关键。本文将探讨如何通过结合Ansible和Docker技术构建一个高效的自动化运维体系。文章不仅介绍了Ansible与Docker的基本原理和优势,还详细阐述了如何整合这两种技术以简化部署流程、加强版本控制,并提高整体运维效率。通过案例分析,我们将展示这一组合在实际环境中的应用效果,以及它如何帮助企业实现持续集成和持续部署(CI/CD)的目标。 【4月更文挑战第30天】 在数据驱动的时代,构建一个高效的机器学习模型是获取洞察力和预测未来趋势的关键步骤。本文将分享五种实用的技巧,帮助数
|
7天前
7.Docker 私有仓库
7.Docker 私有仓库
|
7天前
|
弹性计算 Shell 数据安全/隐私保护
自动化构建和部署Docker容器
【4月更文挑战第30天】
11 0
|
8天前
|
运维 安全 数据安全/隐私保护
构建高效自动化运维体系:Ansible与Docker的协同实践
【4月更文挑战第29天】 在当今IT基础设施快速演变的背景下,自动化成为维护系统稳定性和提升运维效率的关键。本文将深入探讨如何利用Ansible和Docker技术搭建一个高效的自动化运维体系。通过剖析Ansible的配置管理功能与Docker容器化的优势,我们展示了一种能够实现快速部署、轻松管理和无缝扩展的自动化解决方案。文章还将分享一系列优化策略,以期帮助读者构建出既灵活又强大的自动化工具链。
|
8天前
|
Kubernetes 监控 Docker
|
8天前
|
Java Docker 微服务
|
8天前
|
运维 Prometheus 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第29天】在微服务架构日益普及的当下,Docker作为轻量级容器的代表,被广泛应用于服务部署与管理。然而,随之而来的是复杂化的服务监控问题。本文旨在探讨如何构建一个高效且稳定的Docker容器监控体系,确保服务的高可用性。我们将从监控工具的选择、关键监控指标的确定,以及告警机制的设计等方面进行详细阐述,并提供一系列优化实践,以期为运维人员提供参考和指导。
|
9天前
|
运维 Kubernetes 负载均衡
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【4月更文挑战第28天】随着云计算和微服务架构的普及,自动化运维已成为提升系统稳定性、效率及快速响应市场变化的关键。本文将探讨如何利用容器化技术Docker和容器编排工具Kubernetes来构建一个高效、可扩展的自动化运维体系。我们将分析该技术栈的优势,并通过一系列实践案例,展示如何优化现有的运维流程,实现资源的最大化利用和风险的有效控制。
|
9天前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI 操作报错合集之在本地构建easyrec docker镜像时遇到了无法连接docker服务如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。