树莓派上搭建HARBOR私有仓库服务!
不建议说明:
虽然博主花了很多时间去完成这篇博文,目的是在树莓派上运行HARBOR,但博主不再推荐这篇博文了,因为这种修改太复杂了,并且不可能长久化。另外一个原因是,博主找到了一个更加适合在树莓派上运行的基于WEB的可视化方案。详见:https://github.com/Joxit/docker-registry-ui。本篇博文中的内容,仅供兴趣研究使用。
前言:
博主一直有个这样的怨念,一直想建立一个基于ARM架构的,具有WEB管理功能的可视化镜像仓库,用于备份或保存一些私有镜像文件;虽然我确实已经利用了DOCKER的"registry"镜像,在树莓派上建立了私有镜像仓库,可惜,那毕竟只是命令行形式的管理,离可视化管理的便利性还是差非常的远!于是,我便瞄上了HARBOR这个开源仓库工具,一轮测试下来,感觉良好!于是,便开始了在基于ARM架构的树莓派上搭建HARBOR的计划,至官方网站搜索相关资料……崩溃了,最低要求4核心CPU并要求最少4GB的RAM……当时最新的树莓派3B也只有1GB的RAM啊!!!研究了一下,CPU四核心的要求算时满足了,4GB RAM嘛~这不能阻止我!于是至官方网站,下载最新版本的HARBOR安装文件,在导入DOCKER镜像文件后,再次崩溃……镜像文件全是X86或AMD64架构的,很明显,ARM架构的CPU是不可能存在X86或AMD64的指令集的!!当然,我依然不想放弃,强行用这些镜像去启动HARBOR服务,结果很明显,不可能运行起来!!!
那就用X86架构的CPU去搭建HARBOR服务吧?不好意思,博主还是有那么一点点的极客精神的,什么样的需求就用什么样性能的计算机,对一个个人应用的私有镜像仓库,树莓派的性能已经严重过剩了!另外还有一点原因很重要,那些廉价拼装X86服务器的稳定性完全无法匹比完全集成化的树莓派!博主可不想每几个月就查看一下服务器为什么提供不了服务,博主要的是一个建立了服务后,就基本不需要管理的服务器!另外,X86的服务器,更别提那糟糕的功耗与体积了。所以,因为博主的偏执,这个基于HARBOR的私人的镜像仓库的服务器,博主放弃了。
就这样过去了快一年了吧?博主突然想写点什么,于是最近就写了个关于HARBOR的搭建教程,在复测博文代码及资料时,意外的在DOCKER-HUB官方仓库上发现了一组基于ARM架构的HARBOR镜像,于是博主重新燃起在树莓派上架设HARBOR的执念!然而,事实证明,这世上的事往往总是不会那么的顺利!使用那一组ARM镜像建立起的HARBOR服务,总是各式各样的报错!HARBOR服务根本无法正常运行!说实在的,此时的博主很不服气啊!!!已经有了ARM的镜像了,也就意味ARM的HARBOR程序文件已经存在了,而这种程序文件又一定是基于官方的代码编译的,也就意味着,这个ARM架构的程序文件是不会出错的!既然程序文件不会错,那么,就一定是相关的配置问题了!!!那时博主做了自认为非常SB的事,不如自己提取相关资料,并参照官方的X86 HARBOR服务配置,重新构建这些镜像吧……事实证明,这的确是一件非常SB的事。在这之后,博主花费了一周时间,敲了数千条命令,各种测试,手腕都痛了……还好,这一件SB的事终于有点回报了,博主终于在树莓派上非完全正常的启动起HARBOR服务并较为正常的使用了,这之后便是一些简单的错误修复了。至最后,这一组基于ARM的HARBOR服务镜像终于面世了!!当然,一组镜像文件只包括了10[HARBOR]+1[自建]个镜像文件,只能运行起最基本HARBOR服务,但这对个人或少量人员使用的私有仓库来说,这已经完全足够了!!
顺便一提,X86完整的HARBOR安装文件是包括了大约16个镜像,这当中的一些镜像是为实现其它功能而存在的,比如说K8S,明显,这些镜像一般对个人使用的私有仓库完成没未必。如果你想用这一套镜像去玩集群或K8S,缺失的镜像文件自己去研究哦~~
博主本来是想把这一篇博文写成教程的,但显然是不可能了……因为这当中包括了太多的知识点了,无能为力了。下面,本博文将主要介绍的时如何使用这一组镜像文件,在你的树莓派上架设属于你的私有HARBOR仓库。另外,这是独家的哦,不信你可以百度或GOOGLE一下,看看存不存在,在树莓派上安装HARBOR的教程,反正博主搜了一年,答案是不存在。
一、硬件与软件环境
只在这下两个硬件上测试通过,原因是我只有这两个硬件,理论上应该所有ARM架构CPU所运行的操作系统上都能运行!
-
硬 件 :[ Raspberry Pi 4 Model B -- RAM:4G ] 或 [ Raspberry Pi 3 Model B -- RAM:1G ]
-
操作系统 :Raspbian Buster Lite
-
HARBOR版本 :非官方
-
DOCKER版本 :19.03.6
-
DOCKER-COMPOSE版本:1.25.4
-
代码测试日期:2020年03月22日
二、DOCKER环境构建
对于DOCKER环境的构建,博主一直是推荐从官方页面获取安装方法的[官方地址];当然,这里没有树莓派安装DOCKER的方法。关于DOCKER的安装,我写烦了,直接看下面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# [ DOCKER-CE ]=============================================================================================== curl -sSL https://get.docker.com | sh # DOCKER-CE安装官方脚本; # 体验那如洪水猛兽般的下载速度吧!!!! sudo usermod -aG docker pi # 将用户"pi"加入"docker"用户组; # 这样"pi"用户在使用"docker"命令时就不需要在前加"sudo"了; sudo reboot # 重启使一些关于DOCKER的配置生效; docker version # 验证DOCKER-CE是否安装成功[成功将输出DOCKER-CE的版本信息]; # ============================================================================================================ # [ DOCKER-COMPOSE ]========================================================================================== docker pull masnagam/docker-compose:1.25.4 sudo docker run -itd --rm --name docker-compose-cp --entrypoint /bin/bash masnagam/docker-compose:1.25.4 sudo docker cp docker-compose-cp:/usr/local/bin/docker-compose /bin/docker-compose sudo docker stop docker-compose-cp sudo chmod 755 /bin/docker-compose && sudo chwon 0:0 /bin/docker-compose sudo docker-compose version # 我不想解释了…… # DOCKER-COMPOSE在树莓派上安装非常麻烦,建议使用镜像提取法进行安装,如上; # 关于最新的基于ARM的DOCKER-COMPOSE获取,见下: # DOCKER-HUB :https://hub.docker.com/r/masnagam/docker-compose # GITHUB :https://github.com/masnagam/install-docker-compose # ============================================================================================================ |
三、HARBOR安装[在线][已删除所有镜像]
这是在线安装方式,优点是使用最新的镜像,这可能会有一些更新[绝对不会多],这是离线安装无法实现的,但你得体验那如洪水猛兽般的下载速度;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
sudo docker pull onelucksnake/raspharbor_readme:latest # 这是博主自建的镜像文件,主要是包含一些安装需要的基础文件; # 当然,这个镜像还包括了一份很重要的说明,见下文; sudo docker run --rm --name raspharbor -itd onelucksnake/raspharbor_readme:latest /bin/sh # 镜像临时运行[用于提取基础文件]; sudo docker cp raspharbor:/Harbor_Rasp /opt/Harbor_Rasp # 提取安装需要的基础文件; # 重要提示:不要改变“/opt/Harbor_Rasp”,否则下文的“sudo ./step_2_fix”无法正常工作! # 关于原因,见下文的重要说明; sudo tree -p /opt/Harbor_Rasp/ # 非必要命令,只是想让读者知道一下目录结构; # /opt/Harbor_Rasp/ # ├── [drwxr-xr-x] cert.d # │ ├── [-rw-r--r--] raspberry.home.crt # 证书文件[*.raspberry.home] # │ ├── [-rw-r--r--] raspberry.home.csr # 证书请求文件 # │ └── [-rw-r--r--] raspberry.home.key # 私钥文件 # ├── [-rw-r--r--] common.sh # [HARBOR_1.10.1]:[提取] # ├── [-rw-r--r--] harbor.yml # [HARBOR_1.10.1]:[提取 + 修改] # ├── [-rw-r--r--] step_0_ReadMeFirst.txt # 操作说明书 # ├── [-rwxr-xr-x] step_1_prepare # [HARBOR_1.10.1]:[提取] --> ["prepare"] # └── [-rwxr-xr-x] step_2_fix # 针对"Raspberry Pi"版本的"HARBOR"所作的必要配置更改 sudo docker stop raspharbor # 关闭临时运行的容器; cd /opt/Harbor_Rasp/ # 进入安装目录 sudo docker pull onelucksnake/raspharbor_prepare:latest # 摘取"预备"镜像[用于HARBOR服务的初始化]; sudo ./step_1_prepare # 初始化HARBOR服务生成配置文件; sudo ./step_2_fix # 针对官方的配置进行一些权限或配置的修改; # 由于这一组镜像是自构建的,所以本组镜像与官方镜像的配置一定有差异, # 所以此处需要进行修改; sudo docker-compose up -d # 启动HARBOR服务[至此已经完成安装并可以使用了]; # 这会开始下载相关镜像,是一个漫长的等待,镜像包括: # onelucksnake/raspharbor_nginx:latest # onelucksnake/raspharbor_jobservice:latest # onelucksnake/raspharbor_core:latest # onelucksnake/raspharbor_portal:latest # onelucksnake/raspharbor_registryctl:latest # onelucksnake/raspharbor_postgres:latest # onelucksnake/raspharbor_redis:latest # onelucksnake/raspharbor_registry:latest # onelucksnake/raspharbor_log:latest sudo docker-compose ps # 非必要命令,你可以查看是否安装成功; # Name Command State Ports # ----------------------------------------------------------------------------------------------------------------------- # harbor-core /harbor/harbor_core Up (healthy) # harbor-db docker-entrypoint.sh postgres Up (healthy) 5432/tcp # harbor-jobservice /harbor/harbor_jobservice ... Up (healthy) # harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp # harbor-portal nginx -g daemon off; Up (healthy) 80/tcp, 8080/tcp # nginx nginx -g daemon off; Up (healthy) 80/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp # redis docker-entrypoint.sh redis ... Up (healthy) 6379/tcp # registry /entrypoint.sh /etc/docker ... Up (healthy) 5000/tcp # registryctl /harbor/harbor_registryctl ... Up (healthy) |
至此,如果你没有修改[ harbor.yml ]文件中的任何配置,现在你可以通过浏览器访问树莓派的IP,以使用HARBOR服务;你也可以使用域名[ https://harbor.raspberry.home ] 访问HARBOR服务,但别忘记修改本地的[ hosts ]文件以实现本地DNS解释;
默认用户名:admin
默认密码 :lemonsys.cn
四、HARBOR安装[离线]
这是离线安装方式,博主强烈推荐,虽然离线安装包中的镜像文件不是最新的,但由于DOCKER镜像的构成方式及镜像的更新改动不会太大,由于已经存在了基础的DOCKER镜像层,这将使更新非常快,这非常适合国内用户。离线安装包下载见"五、下载";以下为离线安装包的安装方法;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# 用你的方法上传"Harbor_Rasp_Images.tar.gz"文件至"/opt/"目录下,你可能需要"root"权限; cd /opt # 进入"/opt"目录; sudo tar -zxvf Harbor_Rasp_Images.tar.gz -C ./ # 解压文件至当前目录; cd /opt/Harbor_Rasp/ # 进入"/opt/Harbor_Rasp/"目录; sudo docker load -i ./Harbor_Rasp_Images.tar # 导入镜像文件; # 导入镜像后,你可以使用"docker pull *:latest"更新镜像至最新状态,一般这不会花费太多时间; # " * "为对应镜像的名称,例如:"docker pull onelucksnake/raspharbor_readme:latest" # 你会发现导入了不只11个镜像,没关系,这些额外的镜像并不占用空间;大部分情况下这只是一个额外的TAG标记; # 另外,另一部分镜像是构建这一组HARBOR服务镜像的基础镜像;同样并不占空间; # 这些额外的镜像文件是配合源码使用的,方便希望自行研究的读者; # 如果你喜欢简洁,你可以删除所有非"latest"标记的镜像; sudo ./step_1_prepare # 初始化HARBOR服务生成配置文件; sudo ./step_2_fix # 针对官方的配置进行一些权限或配置的修改; # 由于这一组镜像是自构建的,所以本组镜像与官方镜像的配置一定有差异, # 所以此处需要进行修改; sudo docker-compose up -d # 启动HARBOR服务[至此已经完成安装并可以使用了]; sudo docker-compose ps # 非必要命令,你可以查看是否安装成功; # Name Command State Ports # ----------------------------------------------------------------------------------------------------------------------- # harbor-core /harbor/harbor_core Up (healthy) # harbor-db docker-entrypoint.sh postgres Up (healthy) 5432/tcp # harbor-jobservice /harbor/harbor_jobservice ... Up (healthy) # harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp # harbor-portal nginx -g daemon off; Up (healthy) 80/tcp, 8080/tcp # nginx nginx -g daemon off; Up (healthy) 80/tcp, 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp # redis docker-entrypoint.sh redis ... Up (healthy) 6379/tcp # registry /entrypoint.sh /etc/docker ... Up (healthy) 5000/tcp # registryctl /harbor/harbor_registryctl ... Up (healthy) |
至此,如果你没有修改[ harbor.yml ]文件中的任何配置,现在你可以通过浏览器访问树莓派的IP,以使用HARBOR服务;你也可以使用域名[ https://harbor.raspberry.home ] 访问HARBOR服务,但别忘记修改本地的[ hosts ]文件以实现本地DNS解释;
默认用户名:admin
默认密码 :lemonsys.cn
五、测试
由于官方表明至少需要4G的RAM,于是我也很好奇HARBOR是否需要这么多的资源。测试结果如下图,空载运行的情况,内存的占用情况实际非常的小,即使1G的RAM也足够运行;如果仅参考内存占用情况,我甚至怀疑"Raspberry Pi Zero"也能良好运行!如果你只是个人使用,或者是人数不多的小团队使用,只要不是非常频繁上传或拉取镜像,用一个树莓派架设一个私有的镜像仓库,实际上也是是可行的。当然,空载运行怎么能作参考?我没这环境测试,也就这样估计了,读者可能自己实际测试。
关于官方4G RAM的要求,估计是表明当完全启用HARBOR所有功能并能满足一定强度负载时所需要的最低环境需求吧,这里就不再讨论了。
Raspberry Pi 4 Model B && Raspberry Pi 4 Model B
六、下载
此处提供文件下载的链接,这包含:构建镜像用的源码、离线安装包、基于ARM架构的DOCKER-COMPOSE镜像文件、一些说明文件;
百度网盘:https://pan.baidu.com/s/1vbX8W9nDF4TGA-ZZFEPy9w; 提取码:chel ;
1 2 3 4 5 6 7 8 9 10 11 |
# 注意:以下操作是在树莓派上操作,而非REDIS容器内操作; ./Harbor_Rasp ├── Docker-Compos │ ├── Image_docker-compose.tar # SHA256 : f3e6e1a736d4ffa00cd7dd6e8fea7add14ae597c17b6a073a4e43a1acccbee82 │ └── 说明[README].txt ├── Harbor_Rasp_Sources │ ├── Harbor_Rasp_Sources.tar.gz # SHA256 : 97dd7192b361f13630f26c41e8ead27001b3356bfed0fd65ed8d2bff549d4845 │ └── 说明[README].txt └── Harbor_Rasp_Images ├── Harbor_Rasp_Images.tar.gz # SHA256 : 5ad5a482fc9df7d76f823e53ff2281620a4599a4725e8620101b59ee7646484c └── 说明[README].txt |
七、重要说明
你可以使用以下命令去获取关于使用这一组镜像去启用HARBOR服务的重要说明。实际上这一组镜像限制了安装位置,包括安装目录的名称、数据存储的位置及名称、日志存储的位置及目录名称。除此你可以改变任何"harbor.yml"中的内容,比如说密码或域名;博主当然可以修改"step_2_fix"脚本的内容使这一组镜像支持任何路径上的改动,但显然博主不想这么做,因为博主的手腕痛……另一方面原因是,服务安装在"/opt"下也并无不妥,而数据存放位置的改变,也可以通过软链接解决。
1 2 3 |
docker run --rm onelucksnake/raspharbor_readme:latest # 这实际上只是把容器内的"/Harbor_Rasp/step_0_ReadMeFirst.txt"的内容输出到终端而已; # 这些内容中基本包括了很多信息,这些信息对于希望研究这个项目的读者很有帮助; |
另外,如果存在更新信息,我会写在这上面[ DOCKER HUB :https://hub.docker.com/r/onelucksnake/raspharbor_readme ];博文就不更新相关信息了。
八、其它
这是关于"onelucksnake/raspharbor_redis"镜像的补充说明,你极有可能从REDIS的启动日志中看到某条警告信息,是关于系统内存策略的警告;注意,该条警告信息是无法通过修改镜像文件而消除的,这是DOCKER的限制。如果你希望你的REDIS镜像启动日志看起来更漂亮,你可以修改你树莓派上的内核参数,方法如下;
1 2 3 4 5 6 7 8 9 10 11 |
# 注意:以下操作是在树莓派上操作,而非REDIS容器内操作; # 即使你在容器内如此操作,最后会发现不能生效! # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. # To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or # run the command 'sysctl vm.overcommit_memory=1' for this to take effect. # 警告信息内容:修复方法如下; sudo sed -i '1i\vm.overcommit_memory = 1' /etc/sysctl.conf sudo reboot # 重启树莓派生效; |
《完》
树莓派上搭建HARBOR私有仓库服务!:等您坐沙发呢!