Docker 分布式仓库 Harbor的实现

 更新时间:2025年08月04日 09:26:06   作者:转身後 默落  
Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,本文就来介绍一下Docker 分布式仓库 Harbor的实现,感兴趣的可以了解一下

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,由 VMware 开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控,另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等

vmware 官方开源服务: https://github.com/vmware/

harbor 官方github 地址: https://github.com/goharbor/harbor

harbor 官方网址: https://goharbor.io/

harbor 官方文档: https://goharbor.io/docs/

Harbor 功能官方介绍

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

1. Harbor 组成

harbor 是由很多容器组成实现完整功能

  • Proxy: 对应启动组件 nginx。它是一个 nginx 反向代理,代理 Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务
  • UI(Core Service): 对应启动组件 harbor-ui。底层数据存储使用 mysql 数据库,主要提供了四个 子功能:
    • UI: 一个 web 管理页面 ui
    • API: Harbor 暴露的 API 服务
    • Auth: 用户认证服务,decode 后的 token 中的用户信息在这里进行认证;auth 后端可以接 db、ldap、uaa 三种认证实现
    • Token服务: 负责根据用户在每个 project 中的 role 来为每一个 docker push/pull 命令发布一个 token,如果从 docker client 发送给 registry 的请求没有带 token, registry 会重定向请求到 token 服务创建 token
  • Registry: 对应启动组件 registry。负责存储镜像文件,和处理镜像的 pull/push 命令。Harbor 对镜像进行强制的访问控制,Registry 会将客户端的每个 pull、push 请求转发到 token 服务来获取有效的 token
  • Admin Service: 对应启动组件 harbor-adminserver。是系统的配置管理中心附带检查存储用量, ui 和 jobserver 启动时候需要加载 adminserver 的配置
  • Job Sevice: 对应启动组件 harbor-jobservice。负责镜像复制工作的,他和 registry 通信,从一个 registry pull 镜像然后 push 到另一个 registry,并记录 job_log
  • Log Collector: 对应启动组件 harbor-log。日志汇总组件,通过 docker 的 log-driver 把日志汇总到 一起
  • DB: 对应启动组件 harbor-db,负责存储 project、 user、 role、replication、image_scan、 access 等的 metadata 数据

2. 安装 Harbor

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

首先确保 docker 和 docker compose 已安装,并且 docker compose 必须先于 harbor 安装,否则会报错误

注意:docker、 docker compose、 harbor 版本要符合要求不然会安装失败,建议都用最新版本

以 http 模式安装 harbor

下载 Harbor 安装包并解压缩

# 下载离线完整安装包,推荐使用,下载好上传到 /root 目录
[root@Ubuntu2204 ~]#pwd
/root
[root@Ubuntu2204 ~]#ls
harbor-offline-installer-v2.12.2.tgz 

# 解压缩离线包
[root@Ubuntu2204 ~]#mkdir /apps
[root@Ubuntu2204 ~]#tar -xvf harbor-offline-installer-v2.12.2.tgz -C /apps/
[root@Ubuntu2204 ~]#mv /apps/harbor/harbor.yml.tmpl /apps/harbor/harbor.yml

# 只需要修改下面两行 并把 https 相关的先注释了
[root@Ubuntu2204 ~]#vim /apps/harbor/harbor.yml

hostname: 10.0.0.100			# 修改此行,指向当前主机 IP 或 FQDN
harbor_admin_password: 123456	# 修改此行指定 harbor 登录用户 admin 的密码

先把这几行注释了,先不走 https
 12 # https related config
 13 #https:
 14   # https port for harbor, default is 443
 15  # port: 443
 16   # The path of cert and key files for nginx
 17   #certificate: /your/certificate/path
 18   #private_key: /your/private/key/path
 19   # enable strong ssl ciphers (default: false)
 20   # strong_ssl_ciphers: false

# 运行 harbor 安装脚本
[root@Ubuntu2204 ~]#/apps/harbor/install.sh

#  实现开机自动启动 harbor
方法1: 通过 service 文件实现

[root@Ubuntu2204 ~]#vim /lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f  /apps/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /apps/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl enable harbor

方法2: 通过 rc.local 实现
[root@Ubuntu2204 ~]#vim /etc/rc.local
#!/bin/bash
cd /apps/harbor
/usr/local/bin/docker-compose up

[root@Ubuntu2204 ~]#chmod +x /etc/rc.local

安装成功后在浏览器输入本机 IP 地址访问

账号:admin

密码:123456

建立项目

harbor上必须先建立项目,才能上传镜像

命令行登录 harbor

重新找一台安装 docker 的主机进行测试

[root@Ubuntu2204 ~]#cat /etc/docker/daemon.json 
{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.m.daocloud.io"
        ],
    "insecure-registries": ["10.0.0.110"] 	# harbor IP 地址
}

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl restart docker

# 登录 harbor 仓库
[root@Ubuntu2204 ~]#docker login 10.0.0.110
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# 查看存储 Docker 的认证信息等
[root@Ubuntu2204 ~]#cat .docker/config.json 
{
	"auths": {
		"10.0.0.110": {
			"auth": "YWRtaW46MTIzNDU2"
		}
	}
}

# 给本地镜像打标签并上传到 Harbor
[root@Ubuntu2204 ~]#docker tag alpine:latest 10.0.0.110/test/alpine:v1.0
[root@Ubuntu2204 ~]#docker push 10.0.0.110/test/alpine:v1.0

注意:上传镜像前,必须先登录 harbor
	 修改 images 的名称,不修改成指定格式无法将镜像上传到 harbor 仓库
	 Harbor主机IP/项目名/image名:版本
	 如果不事先建立项目,会上传镜像失败

查看 alpine:v1.0 上传成功

下载 Harbor 的镜像

重新找第二台安装 docker 的主机进行测试

下载前必须修改 docker 的 service 文件,加入harbor服务器的地址才可以下载

无需登录,即可下载镜像

[root@Ubuntu2204 ~]#cat /etc/docker/daemon.json 
{
    "insecure-registries": ["10.0.0.110"] 	# harbor IP 地址
}

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl restart docker
[root@Ubuntu2204 ~]#docker pull 10.0.0.110/test/alpine:v1.0

到此这篇关于Docker 分布式仓库 Harbor的实现的文章就介绍到这了,更多相关Docker Harbor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 从零开始构建docker基础镜像的方法

    从零开始构建docker基础镜像的方法

    这篇文章主要介绍了从零开始构建docker基础镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Jenkins Pipeline中Docker镜像构建与推送的常见问题及解决方案

    Jenkins Pipeline中Docker镜像构建与推送的常见问题及解决方案

    在现代 DevOps 实践中,Jenkins 作为一款流行的持续集成和持续交付(CI/CD)工具,被广泛应用于自动化构建、测试和部署流程,然而,在实际使用 Jenkins Pipeline 进行 Docker 镜像构建和推送的过程中,可能会遇到各种问题,本文将通过一个具体的案例给大家详细的介绍一下
    2025-01-01
  • 详解docker搭建redis集群的环境搭建

    详解docker搭建redis集群的环境搭建

    本篇文章主要介绍了详解docker搭建redis集群的环境搭建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Docker创建容器时目录权限踩坑

    Docker创建容器时目录权限踩坑

    这篇文章主要介绍了Docker创建容器时目录权限踩坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 使用docker 部署mysql突然连接不上的问题及解决方法

    使用docker 部署mysql突然连接不上的问题及解决方法

    这篇文章主要介绍了使用docker 部署mysql,突然连接不上,要解决这个问题需要找到根本原因,对症治疗就好,本文通过图文实例相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • docker实践之docker-compose部署mysql方式

    docker实践之docker-compose部署mysql方式

    这篇文章主要介绍了docker实践之docker-compose部署mysql方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Docker如何实现修改Docker0网桥默认网段

    Docker如何实现修改Docker0网桥默认网段

    这篇文章主要介绍了Docker如何实现修改Docker0网桥默认网段,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Docker启用IPv6支持的流程步骤

    Docker启用IPv6支持的流程步骤

    在 Docker 环境中启用 IPv6 支持可以扩展你的网络能力,尤其是在需要同时处理 IPv4 和 IPv6 流量的场景中,本文将详细介绍如何在 Docker 中配置默认的 bridge 网络以及自定义网络来支持 IPv6,需要的朋友可以参考下
    2025-04-04
  • Docker容器添加自定义MySQL配置文件

    Docker容器添加自定义MySQL配置文件

    本文介绍在Docker容器中通过绑定挂载为MySQL添加自定义配置文件,包括确定绑定挂载目录、创建配置文件、添加配置项、重启容器和验证配置,具有一定的参考价值,感兴趣的可以了解一下
    2024-11-11
  • 如何使用docker创建minio镜像并上传文件并提供demo

    如何使用docker创建minio镜像并上传文件并提供demo

    这篇文章主要介绍了使用docker创建minio镜像并上传文件,提供demo,minio还是很方便的,从部署到使用,都可以非常快速的搭建,而且比较稳定,需要的朋友可以参考下
    2023-09-09

最新评论