一、什么是Harbor
简单来说,Harbor 是一个开源的企业级私有 Docker 镜像仓库服务。我们可以把它理解成一个 “私有的、安全的、功能强大的 Docker Hub”。
- 私有: 它部署在你自己的基础设施(如公司的数据中心或私有云)上,你完全掌控其中的所有镜像,不对外公开。
- 企业级: 这意味着它不仅仅是一个简单的存储服务器。它提供了企业所需的高级功能,如权限控制、安全扫描、镜像复制、图形化操作界面等。
- 镜像仓库: 它是专门用来存储、管理和分发 Docker 镜像的地方。你可以向 Harbor 中推送(上传)镜像,也可以从 Harbor 中拉取(下载)镜像。
目前国内的上网环境公共的Docker Hub不能直接访问了,对于公司和个人开发者来说有必要搭建私有的Docker镜像仓库,使用 Harbor 几乎是必须的。公司自己开发的应用程序镜像可能包含敏感代码和配置,绝不能放到公共仓库。Harbor 提供了一个安全的私有环境来存放这些资产。Harbor 可以配置为 Docker Hub、Google Container Registry(GCR)等公有仓库的代理缓存。当公司内第一个开发者拉取某个公有镜像(如 nginx:latest)时,Harbor 会从公网下载并缓存到本地。后续所有开发者再拉取这个镜像时,都会直接从内网的 Harbor 服务器高速获取,极大地节省了公网带宽,加快了拉取速度。
Harbor 将一个简单的镜像存储服务,升级为一个安全、高效、可靠的企业级镜像生命周期管理平台,是现代云原生应用开发和运维不可或缺的基础设施组件。
本文介绍如何通过Harbor搭建和使用自己的私有镜像仓库。
二、安装Harbor
准备一台linux的服务器,我这里是ubuntu 24.04 IP地址是192.168.0.49
Harbor的docker安装要求
On a Linux host: docker 20.10.10-ce+ and docker-compose 1.18.0+ .
1、安装docker
执行以下命令一键安装docker
1 | sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun |
配置国内镜像加速
1 | vim /etc/docker/daemon.json |
1 | { |
1 | service docker restart |
2、安装Harbor
下载harbor安装包,下载地址如下:
https://github.com/goharbor/harbor/releases/download/v2.14.1/harbor-offline-installer-v2.14.1.tgz
将下载的harbor安装包上传到安装harbor的目标服务器的目录下
如/home/app/harbor
解压上传的harbor安装包
1 | tar -zxvf harbor-offline-installer-v2.14.1.tgz |
备份配置文件
1 | cp harbor.yml.tmpl harbor.yml |
修改配置文件
1 | vim harbor.yml |

执行安装脚本
1 | ./install.sh |
安装完成后通过浏览器即可以访问harbor的管理界面
默认的用户名和密码是admin/Harbor12345
三、使用Harbor
1、通过Harbor代理拉取镜像
先在仓库管理中建一个目标,目标是从docker的加速镜像站点去拉取镜像,我这里配置目标URL是https://docker.1ms.run,点击测试链接,提示“测试连接成功”表示目标URL站点没有问题,就可以点击确定。
这样我们就有了一个目标的加速仓库
在“项目”中点击“新建项目”,在镜像代理中开启“镜像代理”,选择我们开始在仓库管理中新建的目标仓库。
在配置管理生成软件物料清单中勾选“在推送镜像时自动生成软件物料清单”,这样我们在拉取镜像时harbor会自动帮我们缓存镜像到本地的harbor仓库,下次拉取时速度就非常快了。
在另外一台需要拉取镜像的机器上配置docker的镜像仓库,将地址配置为Harbor的地址
1 | vim /etc/docker/daemon.json |
1 | { |
重启docker服务
1 | service docker restart |
拉取目标镜像,这里要带上harbor中的项目名称,docker1ms/nginx:1.22
1 | docker pull docker1ms/nginx:1.22 |

在harbor的管理界面可以看到,通过拉取镜像,harbor通过代理镜像源对镜像进行了拉取并缓存到harbor仓库,下次拉取速度更快了。
2、上传镜像到Harbor仓库
另一个在工作中最常用的场景就是将自己的镜像上传到镜像仓库,以便其他人拉取使用。
下面就以在本地已经存在的docker1ms/busybox:latest为例,上传到自己的harbor仓库。
我的harbor仓库的地址是192.168.0.49,上传到默认的library项目中
为镜像打上带仓库地址和项目名的tag
1 | docker tag docker1ms/busybox:latest 192.168.0.49/library/busybox:latest |

客户端登录到harbor
1 | docker login 192.168.0.49 |
输入harbor的用户名和口令进行登录
登录成功后,通过push命令上传镜像到本地harbor仓库
1 | docker push 192.168.0.49/library/busybox:latest |

到harbor管理界面查看push到仓库中的镜像
可以看到busybox镜像已经成功push到harbor的library项目中了。
在Artifacts中可以看到push上来的镜像物料详情,可看到这个busybox镜像的大小是2.1MB
我们可以直接拉取harbor中我们刚push上去的镜像
可以看到如果是默认仓库library项目直接可以docker pull 镜像名就可以拉取
1 | docker pull busybox:latest |

至此,我们通过安装自己私有的镜像仓库Harbor,实现了docker镜像代理下载和上传自己的镜像到Harbor仓库,覆盖了我们平时工作中的大部分场景。
作者博客:http://xiejava.ishareread.com/
关注:微信公众号,一起学习成长!