Harbor使用小记
Harbor使用小记
Harbor是一个开源的镜像仓库。详情可以去Harbor官网或GitHub项目了解更多详情,这里就不作更多介绍。
这篇文章是对我使用Harbor的过程和其中发现的坑点做一个记录。
目标
- 建立一个内网私有镜像仓库
- 缓存从Docker Hub下载的镜像,加速内网其他机器的拉取
缺点
docker pull
必须加上前缀
先说一个很重要的点,Harbor可以作为镜像代理,但在docker pull
时必须要加上前缀(Harbor服务器/Harbor项目名
)。详情请看GitHub上的这个issue。
什么意思?
如果你以前用过阿里云的镜像加速器的话,那你一定知道,进行如下配置后:
你可以直接使用docker pull xxx
来拉取Docker Hub的xxx
镜像,其中流量会走这个镜像加速器。
但对于Harbor来说,你必须使用docker pull Harbor服务器/Harbor项目名/xxx
才可以。
系统重启后很容易启动不了
详见这个issue。
这时候需要cd
进harbor
文件夹(里面有个docker-compose.yml
),然后sudo docker compose restart
。
环境
- 操作系统:Debian 12
- Docker:最新版
- Harbor版本:v2.12.2(最新)
- Harbor文档版本:2.12.0(最新)
- 辅助工具:VSCode(带Remote - SSH插件)
- 正常的网络连接(需要用到代理的地方我会说明的)
过程记录
0、Harbor官网
首先,我们去Harbor官网:
其中Getting started会带你跳转到安装文档,Download now会跳转到GitHub的Releases页面。让我们先看看安装文档(忽略掉使用k8s安装Harbor):
接下来都会按照这几步走。
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
,看到以下内容就成功了:
此时我们docker pull
应该是会失败的,因为众所周知的网络原因(我们只给apt
开了代理,docker pull
没有设置代理):
2、下载Harbor
一定要下载offline的这个。
你想的话还可以下载md5sum
验证下,我就不弄了。
然后把他传到Debian上。(你可以用scp
命令,我就直接使用VSCode拖进去了)
我是放到了家目录/softwares/Harbor
目录中。
cd
到对应目录,然后解压:
1 | tar -zxvf harbor-offline-installer-v2.12.2.tgz |
完成后会出现一个harbor
文件夹:
1 | cd harbor # 进入对应文件夹 |
3、修改配置文件
因为我只在内网使用,所以有所简化。并没有完全安装官方文档来。
总的来说就是改harbor.yml
:
hostname
我改成了我这台Debian的IP地址192.168.81.198
,你应该改成你的IP或域名http
相关的设置我保持了不变https
的我全部注释掉了,因为我在局域网,不需要HTTPSharbor_admin_password
是Harbor中admin
账户的初始密码,我没改data_volume
从/data
改成了/data/harbor
proxy
里的比较重要,你需要改成你的代理服务器,因为Harbor要从Docker Hub拉镜像的话也得要代理- 其他的我看不懂就没改
4、运行安装脚本
cd
到harbor
目录下,然后:
1 | sudo ./install.sh |
看到以下内容说明正常了:
然后,通过IP地址访问Harbor。如果你没改过admin
初始密码,那密码就是Harbor12345
。
5、镜像Docker Hub
点击左侧“系统管理”下的“仓库管理”,点击“新建目标”,然后如下设置:
其中访问ID和访问密码输入你Docker Hub的用户名和密码。(不输也可以,但是Docker官方对匿名用户拉取镜像非常严格)
点击“测试连接”,如果没问题就点“确定”。
接下来要创建项目,“项目”这个名词可能比较难以理解,他是Harbor中的一个逻辑分组单位。按我的说法他就是URL中的一段而已。请先继续看下去。
点击左侧的“项目”,然后是“新建项目”,然后这么设置:
待会儿你可以看到,项目名称docker-hub
会成为URL中的一段。另外两个-1
代表没有限制。
接着,选择左侧“系统管理”的“机器人账户”,点击“添加机器人账户”:
这里我偷懒给了所有权限了,因为我还没详细了解过Harbor的权限设计。
建议使用“导出到文件”,防止你忘了。另外可以注意到我们输入的名字是test
,但最终的名字是robot$test
。
6、在另一台主机上测试
我这里搭建Harbor的主机是192.168.81.198
,然后我选择在另一台Debian主机192.168.81.190
上测试(这台我称为Harbor客户端,Harbor客户端上也得安装Docker)。
修改Harbor客户端的/etc/docker/daemon.json
:
1 | sudo mkdir -p /etc/docker |
重启Docker:
1 | sudo systemctl daemon-reload |
登录Harbor:
现在,我们找个镜像pull
一下试试看:
1 | docker pull 192.168.81.198/docker-hub/nginx:latest |
可以看到docker pull
以后对应的项目里就有了。证明他缓存了,你还可以删除镜像后再试一遍。
你可以发现,这里不能直接docker pull nginx:latest
,这就是我说的缺点一。
7、推送镜像
要推送镜像,我们首先得建一个项目:
然后,在Harbor客户端上构建并推送一个简单的镜像:
然后就可以在项目中看到了:
8、运行推送的镜像
可以看到,成功了!!!(为了演示,我提前清空了Harbor客户端服务器的镜像)
总结
这是对我使用Harbor的一个记录,但是在写完这篇文章后我才发现:
Harbor不太好用,有不少问题。
我已经在考虑换一个软件了,不过如果你确定还是要用Harbor,那希望这篇文章可以帮助到你。