Harbor使用小记

Harbor使用小记

Harbor是一个开源的镜像仓库。详情可以去Harbor官网GitHub项目了解更多详情,这里就不作更多介绍。

这篇文章是对我使用Harbor的过程和其中发现的坑点做一个记录。

目标

  1. 建立一个内网私有镜像仓库
  2. 缓存从Docker Hub下载的镜像,加速内网其他机器的拉取

缺点

docker pull必须加上前缀

先说一个很重要的点,Harbor可以作为镜像代理,但在docker pull时必须要加上前缀(Harbor服务器/Harbor项目名)。详情请看GitHub上的这个issue

什么意思?

如果你以前用过阿里云的镜像加速器的话,那你一定知道,进行如下配置后:

image-20250201202929859

你可以直接使用docker pull xxx来拉取Docker Hub的xxx镜像,其中流量会走这个镜像加速器。

但对于Harbor来说,你必须使用docker pull Harbor服务器/Harbor项目名/xxx才可以。

系统重启后很容易启动不了

详见这个issue

这时候需要cdharbor文件夹(里面有个docker-compose.yml),然后sudo docker compose restart

环境

  • 操作系统:Debian 12
  • Docker:最新版
  • Harbor版本:v2.12.2(最新)
  • Harbor文档版本:2.12.0(最新)
  • 辅助工具:VSCode(带Remote - SSH插件)
  • 正常的网络连接(需要用到代理的地方我会说明的)

过程记录

0、Harbor官网

首先,我们去Harbor官网:

image-20250201204309142

其中Getting started会带你跳转到安装文档,Download now会跳转到GitHub的Releases页面。让我们先看看安装文档(忽略掉使用k8s安装Harbor):

image-20250201204634100

接下来都会按照这几步走。

1、Harbor先决条件

详情可以自己去对应页面看。总结一下就是硬件最小需要2 CPU、4 GB内存、40 GB存储空间,软件需要比较新的Docker Engine、Docker Compose、OpenSSL(前两个安装Docker后就会有,第三个应该是Debian自带了),网络端口需要80、443、4443(不要有其它软件占用了这几个端口,另外其实端口可以改)。

所以基本要做的就是安装Docker,Debian安装Docker的过程我就省略了。

这里需要先设置代理,我的建议是修改/etc/apt/apt.conf,添加代理内容。具体怎么改我就不说了。

另外要将当前用户添加到docker用户组里:

1
sudo usermod -aG docker $USER

退出并重新登录后运行docker ps,看到以下内容就成功了:

image-20250201210623683

此时我们docker pull应该是会失败的,因为众所周知的网络原因(我们只给apt开了代理,docker pull没有设置代理):

image-20250201210754293

2、下载Harbor

Harbor v2.12.2

一定要下载offline的这个。

image-20250201210955021

你想的话还可以下载md5sum验证下,我就不弄了。

然后把他传到Debian上。(你可以用scp命令,我就直接使用VSCode拖进去了)

我是放到了家目录/softwares/Harbor目录中。

image-20250201211726802

cd到对应目录,然后解压:

1
tar -zxvf harbor-offline-installer-v2.12.2.tgz

完成后会出现一个harbor文件夹:

image-20250201211900787

1
2
cd harbor # 进入对应文件夹
cp harbor.yml.tmpl harbor.yml # 前者是模板文件,后者才是我们真正要用的

3、修改配置文件

因为我只在内网使用,所以有所简化。并没有完全安装官方文档来。

总的来说就是改harbor.yml

image-20250201212654257

image-20250201212800072

  1. hostname我改成了我这台Debian的IP地址192.168.81.198,你应该改成你的IP或域名
  2. http相关的设置我保持了不变
  3. https的我全部注释掉了,因为我在局域网,不需要HTTPS
  4. harbor_admin_password是Harbor中admin账户的初始密码,我没改
  5. data_volume/data改成了/data/harbor
  6. proxy里的比较重要,你需要改成你的代理服务器,因为Harbor要从Docker Hub拉镜像的话也得要代理
  7. 其他的我看不懂就没改

4、运行安装脚本

cdharbor目录下,然后:

1
sudo ./install.sh

看到以下内容说明正常了:

image-20250201213352354

然后,通过IP地址访问Harbor。如果你没改过admin初始密码,那密码就是Harbor12345

image-20250201213455685

image-20250201213616932

5、镜像Docker Hub

点击左侧“系统管理”下的“仓库管理”,点击“新建目标”,然后如下设置:

image-20250201213939855

其中访问ID和访问密码输入你Docker Hub的用户名和密码。(不输也可以,但是Docker官方对匿名用户拉取镜像非常严格)

点击“测试连接”,如果没问题就点“确定”。

接下来要创建项目,“项目”这个名词可能比较难以理解,他是Harbor中的一个逻辑分组单位。按我的说法他就是URL中的一段而已。请先继续看下去。

点击左侧的“项目”,然后是“新建项目”,然后这么设置:

image-20250201215008718

待会儿你可以看到,项目名称docker-hub会成为URL中的一段。另外两个-1代表没有限制。

接着,选择左侧“系统管理”的“机器人账户”,点击“添加机器人账户”:

image-20250201215108994

image-20250201215132308

image-20250201215155904

image-20250201215219144

image-20250201215307711

这里我偷懒给了所有权限了,因为我还没详细了解过Harbor的权限设计。

建议使用“导出到文件”,防止你忘了。另外可以注意到我们输入的名字是test,但最终的名字是robot$test

6、在另一台主机上测试

我这里搭建Harbor的主机是192.168.81.198,然后我选择在另一台Debian主机192.168.81.190上测试(这台我称为Harbor客户端,Harbor客户端上也得安装Docker)。

修改Harbor客户端的/etc/docker/daemon.json

1
2
sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json

image-20250201220012570

重启Docker:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

登录Harbor:

image-20250201220431475

现在,我们找个镜像pull一下试试看:

1
docker pull 192.168.81.198/docker-hub/nginx:latest

image-20250201224457177

可以看到docker pull以后对应的项目里就有了。证明他缓存了,你还可以删除镜像后再试一遍。

你可以发现,这里不能直接docker pull nginx:latest,这就是我说的缺点一。

7、推送镜像

要推送镜像,我们首先得建一个项目:

image-20250201225322759

然后,在Harbor客户端上构建并推送一个简单的镜像:

image-20250201225726371

然后就可以在项目中看到了:

image-20250201225858521

8、运行推送的镜像

image-20250201230111334

可以看到,成功了!!!(为了演示,我提前清空了Harbor客户端服务器的镜像)

总结

这是对我使用Harbor的一个记录,但是在写完这篇文章后我才发现:

Harbor不太好用,有不少问题。

我已经在考虑换一个软件了,不过如果你确定还是要用Harbor,那希望这篇文章可以帮助到你。