本文发布于629天前,本文最后更新于617 天前,其中的信息可能已经过时,如有错误请留言或评论。
前提
安装Harbor之前需要安装docker
详细可参考Docker入门教程1 - The-Starry-Sky (suyou.world)
安装Harbor
下载并解压Harbor的离线安装包。可以从Harbor的GitHub存储库页面(https://github.com/goharbor/harbor/releases)下载最新的离线安装包。
wget https://github.com/goharbor/harbor/releases/download/v2.3.0/harbor-offline-installer-v2.3.0.tgz tar xvf harbor-offline-installer-v2.3.0.tgz cd harbor
编辑安装配置文件harbor.yml
在配置harbor.yml文件之前,确保已安装了Docker和Docker Compose,并已从Harbor官方网站下载了最新的harbor-offline-installer安装程序。
- 在计划存储Harbor数据的位置创建一个目录。例如,如果要将Harbor数据存储在/data/harbor目录中,请使用以下命令:
mkdir -p /data/harbor
- 复制Harbor安装程序中的harbor.yml.tmpl文件,并将其命名为harbor.yml。例如,使用以下命令:
cd harbor-offline-installer # 也可能为cd harbor cp harbor.yml.tmpl harbor.yml
- 编辑Harbor的配置文件'harbor.yml',以指定安装选项和配置参数
vim harbor.yml
- 在编辑文件时,请注意以下参数:
- hostname:指定Harbor服务器的主机名或IP地址。
- https:如果希望使用HTTPS协议,请将此选项设置为'on'。
- harbor_admin_password:指定Harbor管理员账户的密码。
- data_volume:指定Harbor数据存储卷的路径。
- clair:是否启用Clair漏洞扫描服务。
- database:Harbor使用的数据库类型和连接参数。
- redis:Harbor使用的缓存服务类型和连接参数。
- 示例:
- 将Harbor安装在https://harbor.example.com地址,并启用HTTPS协议和Clair漏洞扫描服务
hostname: harbor.example.com https: port: 443 certificate: /path/to/cert.pem private_key: /path/to/key.pem harbor_admin_password: Harbor12345 data_volume: /data/harbor clair: updaters_interval: 12h database: type: postgresql password: Harbor12345 max_idle_conns: 50 max_open_conns: 1000 sslmode: disable redis: password: Harbor12345 max_idle: 50 max_active: 1000 registry_storage_provider: name: filesystem config: rootdirectory: /data/registry
- Harbor将在https://harbor.example.com地址上运行
- 使用证书和密钥文件/path/to/cert.pem和/path/to/key.pem
- 管理员密码为Harbor12345
- 数据将存储在/data/harbor目录中
- Clair漏洞扫描服务将在每12小时更新一次
- 使用PostgreSQL数据库
- 并使用密码Harbor12345和最大空闲连接数和最大打开连接数等参数进行配置
- 此外,Redis将使用密码Harbor12345和最大空闲和最大活动连接等参数进行配置。
- registry_storage_provider的name被设置为filesystem,表示使用文件系统来存储镜像。config则指定了文件系统的根目录为/data/registry。如果想使用其他存储方式,可以将name设置为对应的存储提供程序的名称,例如s3、gcs等。对应的config配置也会有所不同,具体可以参考Harbor的官方文档。
- 将Harbor安装在https://harbor.example.com地址,并启用HTTPS协议和Clair漏洞扫描服务
- 运行Harbor的安装脚本,并指定配置文件的路径。
sudo ./install.sh --with-notary --with-trivy --harbor-admin-password <your_password> --config ./harbor.yml #若不安装notary等则可直接sudo ./install.sh
- 在安装过程中,需要输入Harbor管理员账户的密码。此外,还可以选择安装Harbor的附加组件Notary和Trivy。
安装完成
安装完成后,使用以下命令启动Harbor服务:
sudo docker-compose up -d
配置Harbor
要使用Harbor,需要先通过管理界面配置仓库和用户帐户。在浏览器中,输入Harbor服务器的主机名或IP地址,例如:"http://<your_server_ip>"。需要使用之前指定的Harbor管理员帐户登录管理界面,以访问和配置Harbor的各个功能。
在管理界面中,可以执行以下操作:
- 创建仓库:可以创建新的仓库,并为每个仓库指定名称、描述、存储位置和访问权限等属性。
- 添加镜像:可以将Docker镜像上传到Harbor,并将其存储在相应的仓库中。还可以指定每个镜像的标记和元数据信息。
- 管理用户帐户:可以创建和管理用户帐户,并为每个帐户指定相应的角色和权限。例如,可以为每个用户指定是否允许拉取或推送特定的镜像。
- 监控镜像安全:如果安装了附加组件Notary和Trivy,可以使用这些组件监控Harbor中的镜像安全性,并检测可能存在的漏洞和安全问题。
- 配置系统设置:可以配置Harbor的系统设置,并指定各种选项,例如SMTP服务器设置、日志记录选项和访问控制策略等。
使用Harbor
- 从拉取Harbor拉取镜像:
docker pull <harbor_server>/<repository>/<image>:<tag>
- <harbor_server>是Harbor服务器的主机名或IP地址
- <repository>是存储镜像的仓库名称
- <image>是镜像的名称
- <tag>是镜像的标记。
- 推送镜像到Harbor
docker tag <image> <harbor_server>/my-repo/<image>:<tag> docker push <harbor_server>/my-repo/<image>:<tag>
- <image>是要推送的镜像的名称
- <tag>是镜像的标记。
- 登录到Harbor
docker login <harbor_server>
- <harbor_server>是Harbor服务器的主机名或IP地址
- 输入用户名和密码,输入之前在Harbor中创建的帐户凭据。
- 用户名和密码验证成功后,Docker客户端将在本地配置文件中存储用户身份验证令牌。然后就可以使用Docker客户端与Harbor进行交互,并拉取或推送Docker镜像。
- 关闭Harbor
- 登录到Harbor所在的服务器上,执行以下命令停止Harbor服务:
docker-compose down -v
该命令会停止并删除Harbor的所有相关容器和卷。如果需要保留Harbor的数据和配置信息,可以不使用-v参数。
- 登录到Harbor所在的服务器上,执行以下命令停止Harbor服务:
- 重新启动Harbor
docker-compose up -d
该命令会重新启动Harbor的所有相关容器。
拉取镜像到Harbor
- 编写脚本批量拉取镜像
- 设置Harbor服务器和仓库名称:
HARBOR_SERVER=<harbor_server> HARBOR_REPO=<harbor_repository>
- 将<harbor_server>替换为Harbor服务器的主机名或IP地址
- 将<harbor_repository>替换为要推送镜像的仓库名称。
- 设置源镜像的名称和标签:
SOURCE_IMAGES=( "quay.io/library/nginx:latest" "docker.io/library/redis:latest" "docker.io/library/mysql:latest" )
- 拉取来自Quay.io的nginx镜像和Docker Hub上的redis和mysql镜像
- 环遍历源镜像,并拉取、重命名和推送镜像:
for image in "${SOURCE_IMAGES[@]}" do # Pull the source image docker pull $image # Get the image name and tag image_name=$(echo $image | cut -d '/' -f 3) image_tag=$(echo $image | cut -d ':' -f 2) # Tag the image for Harbor harbor_image=$HARBOR_SERVER/$HARBOR_REPO/$image_name:$image_tag docker tag $image $harbor_image # Push the image to Harbor docker push $harbor_image done
- 对于每个源镜像,脚本将首先使用docker pull命令从源镜像站点拉取镜像。
- 然后,它将使用cut命令从镜像名称中提取镜像名称和标签。
- 接下来,它将使用docker tag命令将镜像重新标记为Harbor仓库中的名称和标签。
- 最后,它将使用docker push命令将镜像推送到Harbor仓库。
- 设置Harbor服务器和仓库名称:
解决报错
- 登录Harbor显示核心服务不可用
- harbor-db出现错误
docker ps -a # 找到harbor-db对应镜像的<container id> docker logs -tf <container id> # 查看日志
可能是因为 PostgreSQL 请求了一个超出可用内存、交换空间或巨型页面的共享内存段。可以通过增加系统可用内存或调整 PostgreSQL 的共享内存使用情况来解决该问题- 操作
- 执行命令 free -h 查看系统内存使用情况,确保可用内存足够支持 PostgreSQL 运行。
- 在 harbor.yml 文件中,找到 database 部分,通过减少shared_buffers或max_connections等参数来减少PostgreSQL的共享内存使用
database: ... parameters: # 根据自己的情况修改大小 shared_buffers: "256MB" max_connections: "100" ...
- 重新启动harbor
- 操作
- harbor-db出现错误
- 登录或者拉取推送镜像时报错
docker login harbor 报错Error response from daemon: Get https://***/v2/: dial tcp ***:443: connect: connection refused
或者docker login harbor 报错Error response from daemon: Get http://***/v2/: dial tcp ***:80: connect: connection refused- 解决方法:两种二选一,同时用后面会出现一系列问题
- 在 /etc/docker/daemon.json 的解决办法:添加 insecure-registries 即可
{ "insecure-registries": ["1.1.1.1:80"] #此处替换为harbor服务的ip地址 }
- 在 /usr/lib/systemd/system/docker.service 解决办法:在 ExecStart 添加 --insecure-registry
ExecStart=/usr/bin/dockerd --insecure-registry=1.1.1.1:80 #此处替换为harbor服务的ip地址
- 重启docker与harbor
#若采用第二种方法则需要多运行以下指令 systemctl daemon-reload #重启docker systemctl restart docker #重启harbor(使用docker-compose重启需要在harbor目录下) docker-compose down docker-compose up -d
- 若依旧出现上述报错,则可能是由于修改了harbor服务端口导致,在登录时ip地址后加上你所设置的端口号即可成功登录
- 在 /etc/docker/daemon.json 的解决办法:添加 insecure-registries 即可
- 解决方法:两种二选一,同时用后面会出现一系列问题
常见镜像站
- Docker Hub:https://hub.docker.com/
- Quay.io:https://quay.io/
- Google Container Registry:https://cloud.google.com/container-registry/
- Amazon Elastic Container Registry:https://aws.amazon.com/ecr/
- Microsoft Container Registry:https://azure.microsoft.com/en-us/services/container-registry/
- Harbor:https://goharbor.io/
- Aliyun Container Registry:https://www.aliyun.com/product/acr
参考:
报错参考:https://www.cnblogs.com/namedgx/p/15392778.html
大佬搭建过程参考:https://blog.csdn.net/youmatterhsp/article/details/105868624