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 |
准备证书
将申请好的证书上传到服务器,将 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/ |
重启 Docker
systemctl restart docker |
配置 Harbor 安装配置文件
执行 install.sh
命令安装 Harbor 时,会使用配置文件 harbor.yml
(需要拷贝安装包中的 harbor.yml.tmpl
为 harbor.yml
)。
修改配置中的 hostname
选项,配置访问 Harbor 的域名。此为必须修改的参数。
修改配置中的 https.certificate
和 https.private_key
,配置证书(harbor.crt
)和私钥的路径,使用 HTTPS 时必须配置。
修改配置中的 data_volume
,指定持久化数据卷的路径。默认为 data_volume: /data
执行安装脚本
sudo ./install.sh |
安装成功后,使用浏览器登陆 WEB,初始密码为部署配置文件中配置,默认为 Harbor12345
harbor_admin_password: Harbor12345 |
执行安装脚本部署完成后,会生产 docker-compose.yml
文件,此文件为 Docker 编排 Harbor 的配置文件。使用 docker
重启 Harbor 命令如下:
docker compose restart |
常用操作说明
根据安装脚本生成的 docker-compose.yml
,可以看到各个服务的配置
- 日志路径:
/var/log/harbor/
。各个服务的日志输出到了宿主机的目录 :/var/log/harbor/
registry
服务使用本地存储时,默认路径为 :/data/registry
postgresql
数据库目录 :/data/database
使用 docker 登陆并 push 镜像
登陆 Harbor
docker login harbor.xxx.com |
push
镜像步骤
- 为要推送的镜像打上标签,其中
common
为项目名称docker tag netshoot:my harbor.xxx.com/common/netshoot:my
push
镜像docker push harbor.8be939d.com/common/netshoot:my
- 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
配置
The default data volume |
/data
目录包含的文件夹和相应的作用如下:
ca_download
- 存放用户访问Harbor时所需的 CA 证书。database
- 存放数据库的目录,Harbor、Clair 和 Notary 数据库的数据都在此目录下。job_logs
- 存放 JobService 的日志信息。redis
- 存放 Redis 数据。registry
- 存放 OCI Artifacts 数据(对于大部分用户来说是镜像数据)。secret
- 存放 Harbor 内部组件通信所需的加密信息。
Harbor 容器运行日志保存宿主机在 /var/log/harbor
备份数据
- 创建备份目录
mkdir /HarborBackup
- 备份 Harbor 安装目录,
cp -p -r ./harbor/ /HarborBackup/harbor
- 备份 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 |