通过docker-compose在Kylin v10 aarch64环境部署私有Harbor

发布于:2024-11-27 ⋅ 阅读:(70) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到