Docker 私有镜像仓库 Harbor 安装及使用

环境信息

  • Centos 7
  • docker-ce-19.03.15
  • harbor v2.6.1

安装步骤

官网安装参考链接

下载安装包

wget https://github.com/goharbor/harbor/releases/download/v2.6.1/harbor-offline-installer-v2.6.1.tgz
tar -xf harbor-offline-installer-v2.6.1.tgz
cd harbor

准备证书

将申请好的证书上传到服务器,将 harbor.crt 转换为 harbor.cert

openssl x509 -inform PEM -in harbor.crt -out harbor.cert 

将转换好的证书和私钥拷贝到 Docker 的证书目录 /etc/docker/certs.d/yourdomain.com/

cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

重启 Docker

systemctl restart docker

配置 Harbor 安装配置文件

执行 install.sh 命令安装 Harbor 时,会使用配置文件 harbor.yml(需要拷贝安装包中的 harbor.yml.tmplharbor.yml)。

修改配置中的 hostname 选项,配置访问 Harbor 的域名。此为必须修改的参数

修改配置中的 https.certificatehttps.private_key,配置证书(harbor.crt)和私钥的路径,使用 HTTPS 时必须配置

修改配置中的 data_volume,指定持久化数据卷的路径。默认为 data_volume: /data

执行安装脚本

sudo ./install.sh

安装成功后,使用浏览器登陆 WEB,初始密码为部署配置文件中配置,默认为 Harbor12345

harbor.yml
harbor_admin_password: Harbor12345

执行安装脚本部署完成后,会生产 docker-compose.yml 文件,此文件为 Docker 编排 Harbor 的配置文件。使用 docker 重启 Harbor 命令如下:

docker compose restart

更多 docker compose 命令说明

常用操作说明

根据安装脚本生成的 docker-compose.yml ,可以看到各个服务的配置

  • 日志路径: /var/log/harbor/。各个服务的日志输出到了宿主机的目录 : /var/log/harbor/
  • registry 服务使用本地存储时,默认路径为 : /data/registry
  • postgresql 数据库目录 : /data/database

使用 docker 登陆并 push 镜像

登陆 Harbor

$ docker login harbor.xxx.com
sername: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

push 镜像步骤

  1. 为要推送的镜像打上标签,其中 common 为项目名称
    docker tag netshoot:my harbor.xxx.com/common/netshoot:my
  2. push 镜像
    docker push harbor.8be939d.com/common/netshoot:my
  3. Harbor potal 中检查推送是否成功

用户管理

除了系统管理员 admin(拥有最大权限),Harbor 用户分还有以下几种角色

  • Project Admin

    当系统管理员(admin)给某个用户 项目管理员 的角色后,该用户即可以 项目管理员 的身份管理该项目,其它未分配的项目无权限,项目管理员镜像上传/拉取添加/删除成员Helm Chart 上传/下载配置管理 等权限。该角色在实际的业务场景通常是分配给某个项目的负责人。

  • Maintainer

    维护者 拥有超越开发者 的权限,包括 扫描镜像查看复制任务 以及 删除镜像Helm Chart上传/下载、删除 的能力。

  • Developer

    开发者 拥有项目的读写权限,即 上传镜像 到该项目和从该项目 拉取镜像上传/下载HelmChart查看日志,其它权限没有。

  • Guest

    访客 对指定项目具有 只读权限。他们可以 拉取 和重新标记图像,但 不能推送,也可以登录Harbor UI界面。

  • Limited Guest

    受限访客 没有项目的完全读取权限。他们可以拉取图像但不能推送,而且他们看不到日志或项目的其他成员。例如,您可以为来自不同组织的共享项目访问权限的用户创建受限访客。

    受限访客也可以登录 Harbor,但是只具有镜像拉取权限,无法查看日志等权限。

创建用户

要为指定项目分配用户,必须先创建用户。只有 admin 用户才能创建用户。

要创建用户,在 Administration -> Users -> + NEW USER 添加新用户。

分配用户

admin 或具有 Project Admin 权限的用户可以在指定的项目中,为项目添加成员

要为项目添加成员,进入指定项目,在 Members -> + USER ,为项目分配成员

配置复制

此种复制不会复制用户信息。镜像复制到目标后,会自动更改镜像地址到目标镜像地址,可以直接使用镜像。

配置复制到 Harbor

为了对 Harbor 提供备份,可以配置复制到目标 Harbor 作为备份。

在源 Harbor 配置 replication endpoints

Administration -> Registies -> + NEW ENDPOINT 中,添加 Endpoint,除了 Harbor,还支持以下 Provider [1]

  • Docker Hub
  • Docker registry
  • AWS Elastic Container Registry
  • Azure Container Registry
  • Ali Cloud Container Registry
  • Google Container Registry
  • Huawei SWR
  • Artifact Hub
  • Gitlab
  • Quay
  • Jfrog Artifactory

此处 Provider 选择 Harbor

创建复制规则

Administration -> Replications -> + NEW REPLICATION RULE

根据提示输入自定义选项

  • 如果目标 Harbor 只是用来备用或用来作为镜像下载的仓库,可以配置复制时覆盖目标中同名的镜像

备份

Harbar 主要的数据组成

Harbor 安装过程中,主要依赖执行安装脚本 需要的配置文件 harbor.yml,安装脚本执行后,会生成 docker-compose.yml 文件,同时会生成其他一些临时文件,这些临时文件在 Harbor 容器启动时需要挂载到容器,这些数据通常在 Harbor 安装目录的 common 目录下。虽然临时数据对服务的顺利运行至关重要,但是安装程序每次都会读取 Harbor 配置文件重新生成一份临时数据,所以此处仅需备份配置文件即可

Harbor 容器使用的持久化数据默认保存在宿主机目录 /data,具体目录由安装配置文件 harbor.yml 配置

harbor.yml
# The default data volume
data_volume: /data

/data 目录包含的文件夹和相应的作用如下:

  • ca_download - 存放用户访问Harbor时所需的 CA 证书。
  • database - 存放数据库的目录,Harbor、Clair 和 Notary 数据库的数据都在此目录下。
  • job_logs - 存放 JobService 的日志信息。
  • redis - 存放 Redis 数据。
  • registry - 存放 OCI Artifacts 数据(对于大部分用户来说是镜像数据)。
  • secret - 存放 Harbor 内部组件通信所需的加密信息。

Harbor 容器运行日志保存宿主机在 /var/log/harbor

备份数据

  1. 创建备份目录
    mkdir /HarborBackup
  2. 备份 Harbor 安装目录,
    cp -p -r ./harbor/ /HarborBackup/harbor
  3. 备份 Harbor 持久化数据
    若不确定持久化数据卷的路径,可以查看安装配置文件harbor.yml 中的 data_volume 配置,默认为 data_volume: /data
    cp -p -r /data/ /HarborBackup/data

在需要恢复时,反向拷贝数据即可。需要注意,文件权限需要保持和备份之前的信息一致。

常见错误

http: server gave HTTP response to HTTPS client

错误原因

docker client 和 docker registry 交互默认使用的是 HTTPS,如果镜像仓库使用的是 HTTP 服务,则与私有镜像交互时出现以上错误。

解决方法

修改或创建文件 /etc/docker/daemon.json,添加以下内容:

{ "insecure-registries":["54.236.67.117:5000"] }

重启 docker

systemctl restart docker

参考链接

官网说明

脚注