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 容器启动时间,尤其在大规模部署、CI/CD 或微服务架构中非常关键,启动慢会影响响应时间、弹性扩缩容和用户体验,以下是从镜像构建、容器运行、依赖管理等多个方面整理的 容器启动加速方案,需要的朋友可以参考下
    2025-06-06
  • docker之如何查看正在运行的容器

    docker之如何查看正在运行的容器

    这篇文章主要介绍了docker之如何查看正在运行的容器问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 在docker中运行mariadb程序的方法

    在docker中运行mariadb程序的方法

    这篇文章主要介绍了在docker中运行mariadb程序的方法,首先大家先安装docker,然后在进行相应的操作,具体内容详情大家参考下本文
    2018-05-05
  • Docker如何保存对容器的修改问题

    Docker如何保存对容器的修改问题

    这篇文章主要介绍了Docker如何保存对容器的修改问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 一文详解如何配置docker通过代理服务器拉取镜像

    一文详解如何配置docker通过代理服务器拉取镜像

    这篇文章主要给大家介绍了关于如何配置docker通过代理服务器拉取镜像的相关资料,如果在拉取Docker镜像时遇到速度较慢的问题,可以尝试以下几种方法解决,需要的朋友可以参考下
    2024-07-07
  • Docker buildx构建多平台镜像并推送到私有仓库的方法

    Docker buildx构建多平台镜像并推送到私有仓库的方法

    这篇文章主要介绍了Docker buildx构建多平台镜像并推送到私有仓库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • centos7搭建docker私人仓库的方法(kubernetes)

    centos7搭建docker私人仓库的方法(kubernetes)

    这篇文章主要介绍了centos7搭建docker私人仓库的方法(kubernetes),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • SQL Server 简介与 Docker Compose 部署SQL Server 容器

    SQL Server 简介与 Docker Compose 部署SQL Server 容器

    SQL Server 是一个功能强大的关系型数据库管理系统,适用于各种规模的应用程序和数据存储需求,在本文中,我将简要介绍 SQL Server 的基本概念,并详细阐述如何使用 Docker Compose 部署 SQL Server 容器,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • docker安装nacos并配置文件持久化方式

    docker安装nacos并配置文件持久化方式

    这篇文章主要介绍了docker安装nacos并配置文件持久化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Docker容器中的OpenCV如何轻松构建可移植的计算机视觉环境

    Docker容器中的OpenCV如何轻松构建可移植的计算机视觉环境

    计算机视觉是一门涉及图像和视频处理的领域,可以应用于目标检测、图像识别、人脸识别等各种任务,本文给大家介绍Docker容器中的OpenCV如何轻松构建可移植的计算机视觉环境,感兴趣的朋友一起看看吧
    2023-12-12

最新评论