写在前面
由于 harbor 官方并没有提供 arm 版本镜像,但是提供了 harbor-arm 这个项目,这个项目主要实现通过生成编译 arm 相关镜像的配置文件,进而替换源项目中的配置文件,从而生成部署 harbor 相关的 arm 版本镜像 。
环境原料
- arm 架构的 Linux 机器
- docker (19.03.0 +)
- docker-compose (1.18.0+)
环境准备
安装 docker
#下载docker安装脚本
curl -fsSL get.docker.com -o get-docker.sh
#执行脚本安装docker,它会检查环境并安装相应版本
adsh get-docker.sh
#查看docker版本
docker version
安装 docker-compose
# 下载 docker-compose-linux-aarch64
wget https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-linux-aarch64
# 拷贝到 /usr/local/bin/ 目录
cp docker-compose-linux-aarch64 /usr/local/bin/docker-compose
# 添加可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose version
Docker Compose version v2.14.0
开启 buildx
制作过程中要使用 docker buildx 特性,该特性是在 docker 19.03 中引入的,所以要确保使用的 docker 版本 ≥ 19.03,buildx 特性默认是关闭的,可以通过设置下面环境变量来临时开启试验特性 buildx 。
export DOCKER_CLI_EXPERIMENTAL=enabled
执行 docker buildx ls 命令,有以下输出即代表可正常使用 docker buildx 功能,且证明是可以编译 arm 镜像的。
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
default * docker
default default running linux/arm64
编译镜像
下面根据 harbor-arm 的 README.md 文件提示的步骤进行操作即可,默认构建的 docker 版本是 v2.3.0。
# first step: clone harbor ARM code
git clone https://github.com/goharbor/harbor-arm.git
# execute build command:Download harbor source code
cd harbor-arm && make download
# compile redis:
make compile_redis
# Prepare to build arm architecture image data:
make prepare_arm_data
# Replace build arm image parameters:
make pre_update
# Compile harbor components:
make compile COMPILETAG=compile_golangimage
# Build harbor arm image:
make build GOBUILDTAGS="include_oss include_gcs" BUILDBIN=true NOTARYFLAG=true TRIVYFLAG=true CHARTFLAG=true GEN_TLS=true PULL_BASE_FROM_DOCKERHUB=false
导出镜像
编译完成后会生成下面这些镜像
docker images | grep dev-arm | grep -v base
goharbor/chartmuseum-photon dev-arm 7110e1ad69b2 2 minutes ago 169MB
goharbor/trivy-adapter-photon dev-arm 770be624346c 56 minutes ago 121MB
goharbor/notary-server-photon dev-arm b595ca3974da 2 hours ago 137MB
goharbor/notary-signer-photon dev-arm 3e26eef7ef00 2 hours ago 134MB
goharbor/harbor-exporter dev-arm 016e9f3a1a62 5 hours ago 75.2MB
goharbor/redis-photon dev-arm 4309d3a79b6f 5 hours ago 210MB
goharbor/harbor-registryctl dev-arm d7b23cd2ebcb 5 hours ago 116MB
goharbor/registry-photon dev-arm 104790e8a5e5 5 hours ago 75.1MB
goharbor/harbor-log dev-arm efb99e6c50ad 6 hours ago 153MB
goharbor/harbor-jobservice dev-arm e5e98f5004bc 6 hours ago 186MB
goharbor/harbor-core dev-arm 61093c823c2e 6 hours ago 153MB
goharbor/harbor-portal dev-arm f5b4ca4c640c 6 hours ago 159MB
goharbor/harbor-db dev-arm ee77169a3bff 6 hours ago 183MB
goharbor/prepare dev-arm 7e213f4aefb8 24 hours ago 258MB
goharbor/nginx-photon dev-arm d4b2feba0610 6 months ago 40.8MB
不出意外,应该是15个,可以将这些镜像打包,根据自己的需求来进行部署
docker save $(docker images | grep dev-arm | grep -v 'base'| awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o harbor_arm_images.tar