Docker分别使用Registry和Harbor搭建私有仓库

0    709    6

Tags:

👉 本文共约4953个字,系统预计阅读时间或需19分钟。

一、简介

在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目push到公有仓库进行管理。所以为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。

Harbor和Registry的比较

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。

1.提供分层传输机制,优化网络传输

Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。

2.提供WEB界面,优化用户体验

只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。

3.支持水平扩展集群

当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

4.良好的安全机制

企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

二、registry 的搭建

搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

官网:https://hub.docker.com/_/registry?tab=tags&page=1&ordering=last_updated

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

浏览器访问http://127.0.0.1:5000/v2,出现下面情况说明registry运行正常。

Docker分别使用Registry和Harbor搭建私有仓库

验证

现在通过push镜像到registry来验证一下。

查看本地镜像:

要通过docker tag将该镜像标志为要推送到私有仓库:

通过 docker push 命令将 nginx 镜像 push到私有仓库中:

访问 http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:

img

下载私有仓库的镜像,使用如下命令:

报错解决

若是在其它docker的客户端上传报错:

出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交时出现以上错误。

解决,vim /etc/docker/daemon.json,增加如下内容:

例如,我的文件增加后:

然后,重启docker。

三、harbor 的搭建

简介

docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。

  • 虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
  • Harbor是由VMware公司开源的企业级的Docker Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。
  • 它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP 集成,日志审核等功能,完全的支持中文。
    Docker分别使用Registry和Harbor搭建私有仓库

Harbor核心组件解释

Docker分别使用Registry和Harbor搭建私有仓库

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

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

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

    本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
  • Core services: 这是Harbor的核心功能,主要提供以下服务:

    • UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。
    • webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。
    • token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
  • Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。

  • Job Services:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中。

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

Harbor特性

  • 基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。

harbor搭建

下载地址:https://github.com/goharbor/harbor/releases

官网:https://goharbor.io/docs/2.3.0/

最新版本:2.3.1

安装包大小:600MB

安装条件: docker 17.06.0-ce+ 且 docker-compose 1.18.0+

Download binaries of Harbor release and follow Installation & Configuration Guide to install Harbor.

下载并解压:

harbor启用https访问

https://goharbor.io/docs/2.3.0/install-config/configure-https/

https://www.cnblogs.com/cjwnb/p/13441071.html

默认情况下,Harbor不附带证书。可以在没有安全性的情况下部署Harbor,以便您可以通过HTTP连接到它。但是,只有在没有外部网络连接的空白测试或开发环境中,才可以使用HTTP。在没有空隙的环境中使用HTTP会使您遭受中间人攻击。在生产环境中,请始终使用HTTPS。如果启用Content Trust with Notary来正确签名所有图像,则必须使用HTTPS。

要配置HTTPS,必须创建SSL证书。您可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。

注:高版本(14以上)docker执行login命令,默认使用https,且harbor必须使用域名,不建议IP地址,且后期使用IP方式可能废弃。

假设使用的网址是:www.xmmharbor.com,本机ip是192.168.1.36:

因为这个网址是虚拟的,所以需要在本机hosts文件中添加

修改harobr.yml文件:

一键生成密钥脚本文件:

最终docker目录结构:

开始安装

通过运行 install.sh 构建镜像,并把服务启动起来:

可以看到Harbor已经成功安装并启动了。

数据库包含PostgreSQL和Redis。

web使用Harbor

访问 https://www.xmmharbor.comhttps://192.168.1.36 ,如下:

Docker分别使用Registry和Harbor搭建私有仓库

Docker分别使用Registry和Harbor搭建私有仓库

用户名密码为:admin/Harbor12345

Docker分别使用Registry和Harbor搭建私有仓库

可以创建项目,创建用户,给项目分配用户等等,操作都很简单 。

image-20210805160243403

image-20210805160308515

当项目设为公开后,任何人都有此项目下镜像的读权限。命令行用户不需要“docker login”就可以拉取此镜像。

客户端上传镜像

首先登录私有仓库,可以使用 admin 用户 ,也可以使用我们自己创建的具有上传权限的用户:

  • 如果报错:Error response from daemon: Get https://www.xmmharbor.com/v2/: unauthorized: authentication required,原因:这是密码输入错误了。。。。

  • 如果报错:

解决方法一:将服务器端的/etc/docker/certs.d文件夹拷贝到客户端的相同位置:

然后重启docker即可。

解决方法二:则需要修改客户端的/etc/docker/daemon.json文件,增加如下内容:

例如:

然后重启docker!!!

可以看到Insecure Registries的值已经被修改了。

要通过docker tag将该镜像标志为要推送到公有仓库,例如:

上传镜像:

image-20210805160704506

上传完成。

访问 web界面https://www.xmmharbor.com/harbor/projects,刷新:

image-20210805160815233

可以下载:

Docker分别使用Registry和Harbor搭建私有仓库

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

13 − 2 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部