1. 先准备一个国外的arm服务器,(使用国内的也行,只是有时候下载依赖会断,需要科学上网)
2. git clone harbor的源码包,切换到要编译的分支
3. 修改harbor/Makefile
Makefile里面的这些字段设置为true,代表构建他们的镜像,默认是false
NOTARYFLAG
TRIVYFLAG
CHARTFLAG
PULL_BASE_FROM_DOCKERHUB 设置为false,代表不从dockerHub进行拉取Dockerfile里面的base镜像(dockerhub里面只有amd64的)
SPECTRAL_VERSION=v6.11.1 (测试6.10.0版本的arm不可用)
注意:
源码2.7分支里面,db的Dockerfile有错误,会造成无法生成base镜像:
去掉红框里面内容。
修改 harbor/tools/spectral/Dockerfile
harbor/tools/mockery/Dockerfile
harbor/tools/swagger/Dockerfile 里面的下载包,换成arm的
执行构建:
make all VERSIONTAG=v2.7.3 NOTARYFLAG=true CHARTFLAG=true TRIVYFLAG=true (会生成build镜像的文件以及编译代码)
make build VERSIONTAG=v2.7.3 NOTARYFLAG=true CHARTFLAG=true TRIVYFLAG=true (只会build镜像)
——————————————————————————————
总体来说,如果有外网arm服务器,编译镜像的时候,去掉从公网拉取base的基础镜像的选项(PULL_BASE_FROM_DOCKERHUB,因为只有amd的),编译程序会自动给生成所需要的base镜像,然后根据harbor/make/photon下面的组件目录里面的Dokcerfile去拉取依赖生成镜像。
dockerhub 里面存的有arm镜像(2.7.3和2.7.3-new一样,区别在于有的基础镜像里面的glibc版本包高低区别),包含构建组件的基础base镜像。
dockerbub仓库名称:ming123