1. 概述
Harbor是一个开源的企业级Docker Registry管理工具,它提供了一个安全、可靠、可扩展的平台,用于存储、管理和分发Docker镜像。Harbor可以帮助组织和团队更好地管理Docker镜像,并提高应用程序构建和部署的效率。
以下是Harbor的一些主要特点:
- 安全:Harbor提供了完整的认证和授权机制,支持LDAP、AD等集成方式,可以让用户更加安全地管理和使用Docker镜像。
- 可靠:Harbor提供了多个镜像仓库,支持复制和高可用性,确保应用程序的部署和升级是平滑和无缝的。
- 可扩展:Harbor是一个可扩展的平台,可以支持数千个并发构建和部署,从而满足高流量的应用程序部署需求。
- 用户友好:Harbor提供了一个直观、易于使用的Web界面,让用户可以轻松地查找、上传和下载Docker镜像。
- 灵活性:Harbor提供了一个可定制的平台,可以根据组织和团队的需求进行自定义配
Harbor的部署和使用非常简单,可以使用Docker Compose轻松地在本地环境中部署。Harbor还提供了API和CLI工具,可以方便地与其他DevOps工具集成。Harbor已被广泛采用,并被认为是企业级Docker Registry管理工具的首选之一。
2. 架构
如上图所描述,Harbor由6个大的模块所组成:
- Proxy: Harbor的registry、UI、token services等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients的请求转发到后端服务上。
- Registry: 负责存储Docker镜像,以及处理Docker push/pull请求。因为Harbor强制要求对镜像的访问做权限控制, 在每一次push/pull请求时,Registry会强制要求客户端从token service那里获得一个有效的token。
- UI:图形界面。
- WebHook:及时获取registry上image状态变化情况,在registry上配置 webhook,把状态变化传递给UI模块。
- Token服务:负责根据用户权限给每个docker push/pull命令签发token。Docker 客户端向
Registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。 - Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
- Job services: 主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
- Log collector: 负责收集其他组件的日志到一个地方。
3 安装Harbor
3.1 安装docker和docker-compose
由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 必须大于等于 1.10.0 版本,docker-compose 必须要大于 1.6.0 版本。Kylin v10系统自带的满足要求,故我们自己安装源里的包即可
配置软件
vim /etc/yum.repos.d/kylin_aarch64.repo
###Kylin Linux Advanced Server 10 - os repo###
[ks10-adv-cdrom]
name = Kylin Linux Advanced Server 10 - cdrom
#baseurl = file:///run/media/root/KYLIN10-SVR
baseurl = http://archive2.kylinos.cn/rpm/kylin/production/KY-KY10-GFB-aarch64/custom/kylin-server/KY10-GFB-aarch64-2204/
gpgcheck = 0
enabled = 1
安装软件包docker和docker-compose
yum update
yum -y install docker docker-compose
3.2 安装harbor
3.2.1 下载harbor
官方镜像下载在如下地址:
https://github.com/goharbor/harbor/releases
默认harbor官方镜像并不支持arm架构,目前网上提供了arm的版本,地址如下:
https://github.com/wise2c-devops/build-harbor-aarch64/releases
我们直接wget离线的harbor镜像,里面包含了harbor部署所需要的所有docker images
wget https://github.com/wise2c-devops/build-harbor-aarch64/releases/download/v2.10.2/harbor-offline-installer-aarch64-v2.10.2.tgz
3.2.2 解压harbor
tar -xvf harbor-offline-installer-aarch64-v2.10.2.tgz -C /opt/
3.2.3 配置harbor
cd /opt/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: 172.19.0.247
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 8080
#https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# enable strong ssl ciphers (default: false)
# strong_ssl_ciphers: false
harbor_admin_password: Harbor12345
# The default data volume
data_volume: /data/harbor
根据实际情况修改主机地址和密码,若有域名服务器,可以填写域名,若不采用https访问,则注释掉https那一段,采用http那一段,若有https则配置上certificate和private_key
3.2.4 导入镜像
docker load < harbor.v2.10.2.tar.gz
3.2.5 运行
harbor.yml 文件修改好,可以启动运行,直接运行 install.sh 脚本文件就可以。
./install.sh
注意:可能有未启动成功的容器,一般为挂载容器的配置文件权限不够或者连不上数据库
查看日志:如core容器启动失败
tail -f /var/log/harbor/core.log
修改安装包内配置文件目录的权限
chown -R 10000:10000 common/
修改postgresql.conf:位于存储目录:/data/harbor/database
cd /data/harbor/database/pg14
sed -i "s|#listen_addresses = 'localhost'.*|listen_addresses = '*'|g" postgresql.conf
sed -i "s|#unix_socket_directories = '/tmp'.*|unix_socket_directories = '/run/postgresql'|g" postgresql.conf
停止再启动
docker-compose stop
docker-compose start
3.3 启动服务
启动服务
cd /opt/harbor/
docker-compose start
3.4 停止服务
docker-compose stop
3.5 检查服务
docker-compose ps
3.6 日志
日志存储在/var/log/harbor/下
3.7 WEB
http://172.19.0.247:8080/,admin/Harbor12345
登录后,如下图所示:
4. 客户端私有镜像仓库
4.1 配置docker
修改daemon.json文件,添加下面一行
vim /etc/docker/daemon.json
{
"experimental": true,
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"],
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"insecure-registries" : [ "172.19.0.247:8080" ]
}
重启服务
systemctl daemon-reload
systemctl restart docker
4.2 推送和拉取镜像常用操作
4.2.1 先登录harbor
可以创建其他用户,通过其他用户登录,目前仅通过admin登录,密码为Harbor12345
docker login 192.168.182.110:80 -u admin
4.2.2 打标签及推送
推送一个从公网下载的nginx镜像,先tag打上标签,然后再push上服务器
docker tag nginx:latest 172.19.0.247:8080/library/nginx:latest
docker push 172.19.0.247:8080/library/nginx:latest
通过页面可以查看到已经上传的镜像了
4.2.3 拉取镜像
配置好docker,然后执行docker pull拉取仓库中的镜像
docker pull 172.19.0.247:8080/library/nginx:latest
5.问题记录
- docker login 502 Bad Gateway
[root@node2 ~]# docker login http://172.19.0.247:8080 -u admin
Password:
Error response from daemon: login attempt to http://172.19.0.247:8080/v2/ failed with status: 502 Bad Gateway
检查服务端服务,发现registry服务异常,一直处于重启状态
将registry服务修复后即可正常登录。
6. 参考文献
https://goharbor.io/
https://blog.csdn.net/weixin_43956919/article/details/120601892
https://github.com/wise2c-devops/build-harbor-aarch64/releases
https://blog.csdn.net/Satur6ay/article/details/136820499
https://github.com/goharbor/harbor/releases
https://xie.infoq.cn/article/faa9ee456452891828cc080b8
https://www.cnblogs.com/chunjeh/p/17769007.html
https://juejin.cn/post/7223027325037789241