Registry,Harbor镜像仓库部署

一、Registry仓库

2.1 Registry 简介

Docker Hub 是一个公共的镜像仓库,用户可以在上面找到各种镜像,并且可以将自己创建的镜像推送到 Docker Hub。然而,有时候为了保护隐私或满足某些特定需求,用户可能需要一个私有的镜像仓库。这个需求可以通过开源软件 Registry 实现。
Registry 是一个开源的 Docker 镜像仓库,提供了私有镜像存储和管理的功能。Registry 初代代码库是用 Python 编写的,自 2.0 版本起,新代码库采用 Go 语言编写,并进行了重大优化,包括镜像 ID 的生成算法、镜像的存储结构等,从而显著提高了 pull 和 push 镜像的效率。

2.2 Registry 类型

公开仓库:允许任何人上传和下载镜像。
私有仓库:仅限于授权用户访问和使用。
Docker Hub 提供了 Registry 镜像,用户可以利用这个镜像来构建一个容器,从而搭建自己的私有仓库服务。

二、Registry仓库的安装与使用

基于docker环境部署

2.1 节点规划

IP地址节点
192.168.186.129容器server节点
192.168.186.128容器client节点

2.2 Registry仓库安装

拉取registry镜像

[root@server ~]# docker pull registry

查看registry镜像是否拉取成功

[root@server ~]# docker images

在这里插入图片描述

配置/etc/docker/daemon.json文件,添加标注一行

[root@server ~]# vi /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.186.129:5000"]
  # 指定 Docker 守护进程允许使用不安全的(即未使用 HTTPS 的)注册表
}

启动部署registry仓库

[root@server ~]# docker run -d -p 5000:5000 --restart=always --name registry

列出本地机器上的所有 Docker 镜像,包括中间镜像(intermediate images)和悬挂镜像(dangling images)

[root@server ~]#  docker images -a

在浏览器输入,若出现如下界面表示registry运行正常

http://192.168.186.129:5000/v2/

在这里插入图片描述

2.3 Server服务器端测试

从指定的华为云 SWR 镜像仓库拉取 nginx 镜像

[root@server~]#docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest

查看nginx镜像是否拉取成功

[root@server~]# docker images

在这里插入图片描述

使用 docker tag 命令为本地的 Docker 镜像 5ef79149e0ec 创建一个新的标签 192.168.186.129:5000/nginx:latest

[root@server~]# docker tag 5ef79149e0ec 192.168.186.129:5000/nginx:latest
[root@server~]# docker images 

将本地nginx镜像上传到私有registry镜像仓库

[root@server ~]# docker push 192.168.186.129:5000/nginx:latest

上传后,在浏览器打开,出现如下界面表示上传成功

http://192.168.186.129:5000/v2_catalog

出现如下界面表示上传成功

在这里插入图片描述
使用 curl 命令访问私有Registry仓库的 API,获取仓库中镜像的目录和标签列表,测试镜像是否上传成功

[root@server ~]# curl http://192.168.186.129:5000/v2/_catalog
[root@server ~]# curl 192.168.186.129:5000/v2/nginx/tags/list

在这里插入图片描述

2.4 Client客户端拉取镜像测试

修改配置文件daemon.json,添加如下标注字段,指定 Docker 守护进程允许使用访问registry镜像仓库

[root@client ~]# vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.186.129:5000"]
}

重启docker服务,使配置文件生效

[root@client ~]# systemctl restart docker

使用 curl 命令访问私有Registry仓库的 API,获取仓库中镜像的目录和标签列表,测试server端镜像仓库nginx是否上传成功

[root@client ~]# curl 192.168.186.129:5000/v2/_catalog

在这里插入图片描述
在client客户端,拉取 nginx:latest 镜像

[root@client ~]#  docker pull 192.168.186.129:5000/nginx:latest

查看镜像是否拉取成功

[root@client ~]# docker images

在这里插入图片描述

验证client客户端拉取私有仓库镜像成功

三、Harbor仓库

3.1 Harbor简介

Harbor 是一个开源的容器镜像仓库,用于存储和分发 Docker 镜像。它提供了一种安全、可靠且易于使用的解决方案,用于管理镜像的整个生命周期,从创建、存储到分发。Harbor 支持团队协作,并且可以与现有的 CI/CD(持续集成/持续部署)系统无缝集成。

Harbor 的主要特点包括:
安全
Harbor 支持镜像签名和扫描,确保镜像的完整性和安全性。
提供角色基础访问控制(RBAC),可以为不同的用户和团队设置精细的权限。

高度可扩展
支持镜像仓库的高可用部署,确保服务的稳定性。
支持与第三方工具集成,如 Jenkins、GitLab 等。

镜像仓库
支持 Docker Registry HTTP API V2,与 Docker 客户端和工具兼容。

审计日志
记录用户操作和系统事件,便于监控和审计。

镜像复制
支持镜像在不同 Harbor 实例之间的复制,方便跨数据中心管理。

Harbor和docker registry的关系
Harbor实质上是对docker registry做了封装,扩展了自己的业务模板

与云原生生态系统集成
可以与 Kubernetes 等云原生技术集成,支持容器化应用的部署和管理。
Harbor 适用于企业级环境,它帮助企业构建和维护自己的私有镜像仓库,同时确保镜像的安全性和合规性。通过使用 Harbor,企业可以更好地控制其容器化应用的镜像管理,提高开发和运维的效率。

3.2 Harbor的架构

Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Logcollector(Harbor-log)、Job services 六个组件.

1.Proxy(代理服务)
作用:作为前端流量入口,负责将所有来自客户端的请求(如 docker push/pull、UI、API 请求等)转发给后端的服务。
常见的代理服务可以使用 Nginx 来处理传入的请求,起到负载均衡、SSL/TLS 终止以及安全请求转发的作用。它将请求路由到相应的组件,如 Registry、Core Services 等。

2.Registry(镜像仓库)
作用:这是 Docker 镜像的实际存储库,负责存储和分发容器镜像。
Harbor 使用了 Docker 官方的 Registry 2.0 版本,支持标准的 Docker Registry API。Registry 的主要任务是存储镜像层和元数据,并通过加速传输机制优化镜像的上传和下载性能。

3.Core Services(核心服务)
作用:这是 Harbor 的业务逻辑中心,处理大部分的操作,如用户认证与授权、镜像的权限管理、镜像复制策略等。
用户登录与权限管理:通过 LDAP 或本地用户系统管理用户的访问权限。 - 项目管理:可以创建项目并控制每个项目中的镜像权限。 - 镜像复制:跨数据中心的镜像同步,确保镜像分发的高可用性。

4.Database(Harbor-db,数据库)
作用:用于存储 Harbor 的所有元数据,如用户信息、项目、镜像标签、权限和策略等。
Harbor 默认使用 PostgreSQL 数据库来存储这些信息。数据库是 Harbor 运行的基础,提供持久化存储的支持。

5.Logcollector(Harbor-log,日志收集器)
作用:收集和管理系统运行时产生的日志,以便审计、故障排查和运维监控。
Harbor 中的日志可以由多个服务产生,包括 Proxy、Registry、Core Services 等。Logcollector 统一收集并存储这些日志,通常可以将日志输出到文件系统或外部日志管理系统(如 Elasticsearch、Fluentd)。

6.Job Services(任务服务)
作用:负责调度和执行后台任务,如镜像复制、垃圾回收、镜像漏洞扫描等。
镜像复制:跨数据中心的同步任务。 - 垃圾回收:定期清理未使用的镜像,释放存储空间。 - 漏洞扫描:通过集成的安全扫描器(如 Clair 或 Trivy)对镜像进行安全检查。

3.3 Harbor 架构流程简述

1. 用户访问: 用户通过 Proxy 访问 Harbor,执行镜像推送、拉取操作,或通过 Web 界面进行管理操作。

2.核心服务处理: Proxy 将请求转发到 Core Services,Core Services 处理用户认证、权限管理和业务逻辑。

3. 镜像存储和拉取: Core Services 与 Registry 交互,存储或拉取镜像的具体数据。

4. 任务调度:Job Services 根据策略调度镜像复制任务、漏洞扫描任务等。

5. 日志记录: Logcollector 收集各组件产生的日志,并统一管理。 Harbor 通过这六个核心组件,实现了完整的企业级容器镜像管理和分发功能,支持大规模、多区域部署以及安全、权限控制等特性。

四、Harbor仓库的安装与使用

基于docker环境部署

4.1 节点规划

IP地址主机名
192.168.186.129容器server节点
192.168.186.128容器client节点

4.2 Harbor仓库安装

下载安装docker-compose服务

[root@server~]#curl -L "https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

给予docker-compose服务执行权限

[root@server ~]# chmod +x /usr/local/bin/docker-compose

查看docker-compose安装情况

[root@server ~]# docker-compose --version

在这里插入图片描述

Harbor仓库安装
将准备好的包上传到/root目录中

harbor-offline-installer-v2.1.3_1.tgz

在这里插入图片描述

解压 harbor-offline-installer-v2.1.3_1.tgz压缩包到/usr/local目录下

[root@server ~]# tar zxvf harbor-offline-installer-v2.1.3_1.tgz -C /usr/local/

进入/usr/local/harbor目录,执行./prepare脚本,初始化Harbor数据库,配置文件等设置

[root@server harbor]# ./prepare

1.【问题】
在运行 ./prepare 脚本,准备并生成需要的配置和数据文件时,出现harbor.yum配置文件不存在的问题
在这里插入图片描述
查看harbor目录下配置文件,发现存在harbor.yml.tmpl文件(模板文件)
为什么是 harbor.yml.tmpl 而不是 harbor.yml?
在这里插入图片描述
模板文件:harbor.yml.tmpl 是一个模板文件,它包含了所有需要配置的参数的默认值。这个文件在 Harbor 的安装过程中被用作起点,用户可以根据需要修改这些默认值。
用户自定义:在安装过程中,prepare 脚本会从 harbor.yml.tmpl 复制一份配置文件到 harbor.yml。用户可以编辑这个新生成的 harbor.yml 文件来自定义 Harbor 的配置,如数据库设置、端口、URL 等。

避免覆盖:使用模板文件可以确保用户的自定义配置不会被新版本的安装包覆盖。每次升级 Harbor 时,用户的自定义配置可以保留在 harbor.yml 文件中,而模板文件 harbor.yml.tmpl 通常不会被修改。

【解决】
将其复制并重命名为harbor.yml

[root@server harbor]# cp /usr/local/harbor/harbor.yml.tmpl /usr/local/harbor/harbor.yml

重新运行./prepare命令,重新运行./prepare命令,成功运行,问题解决
至此。问题解决.

编辑harbor.yml文件

[root@server harbor]# vi /usr/local/harbor/harbor.yml
--5行-- 设置为Harbor服务器的IP地址或者域名
hostname = 192.168.10.23
# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
# https:
  # https port for harbor, default is 443
# port: 443
  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

--59行-- 指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

在这里插入图片描述

使用./install.sh脚本,配置启动Harbor各组件

[root@server harbor]#  ./install.sh

查看当前服务的状态

[root@server harbor]# docker-compose ps

在这里插入图片描述

在浏览器输入,结果如下

http://192.168.186.129

在这里插入图片描述
输入张密码,登录Harbor仓库,账户密码在之前的配置文件中有所提及

账户:admin
密码:Harbor12345

成功登录,如下图
在这里插入图片描述

4.3 Server服务器端测试

拉取nginx镜像到server端

[root@server~]#docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:latest

查看是否拉取成功

[root@server ~]# docker images

在这里插入图片描述

给上传的nginx镜像重新打标签

[root@server~]#docker tag 5ef79149e0ec 192.168.186.129/library/nginx:latest

在server端登录Harbor仓库

[root@server harbor]# docker login -u admin -p Harbor12345 http://192.168.186.129

在这里插入图片描述

【问题】
在登陆Harbor仓库时,出现无法连接到443端口的问题
在这里插入图片描述

【解决】
修改harbor.yml配置文件,修改port端口号为443

[root@server harbor]# vi harbor.yml
# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 443

修改配置文件后,重启docker服务

[root@server harbor]#  systemctl restart docker

再次登录harbor服务

[root@server harbor]#  docker login -u admin -p Harbor12345 http://192.168.186.129

在这里插入图片描述
至此,问题解决.

将nginx推送到docker

[root@serverharbor]# docker push  192.168.186.129/library/nginx:latest

[root@server harbor]# docker push  192.168.186.129/library/nginx:latest

在Harbor界面中查看镜像是否上传成功
在这里插入图片描述

4.4 Client客户端测试

配置/etc/docker/daemon.json文件,添加标注一行

[root@client ~]# vi /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.186.129:"]
}

在服务器端,登录Harbor仓库

[root@client ~]#  docker login -u admin -p Harbor12345 192.168.186.129

在这里插入图片描述

拉取客户端的nginx镜像

[root@client ~]# docker pull 192.168.186.129/library/nginx

在这里插入图片描述

查看是否拉取成果

[root@client ~]# docker images

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值