11.Docker 之分布式仓库 Harbor

Docker 之分布式仓库 Harbor

  • Docker 之分布式仓库 Harbor
      1. Harbor 组成
      1. 安装 Harbor

Docker 之分布式仓库 Harbor

Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,由 VMware 开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控,另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等

vmware 官方开源服务: https://github.com/vmware/

harbor 官方github 地址: https://github.com/goharbor/harbor

harbor 官方网址: https://goharbor.io/

harbor 官方文档: https://goharbor.io/docs/

Harbor 功能官方介绍

  • 基于角色的访问控制: 用户与 Docker 镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限
  • 镜像复制: 镜像可在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景
  • 图形化用户界面: 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间
  • AD/LDAP 支: Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理
  • 审计管理: 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理
  • 国际化: 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来
  • RESTful API: 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易
  • 部署简单: 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备

1. Harbor 组成

harbor 是由很多容器组成实现完整功能

  • Proxy: 对应启动组件 nginx。它是一个 nginx 反向代理,代理 Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务
  • UI(Core Service): 对应启动组件 harbor-ui。底层数据存储使用 mysql 数据库,主要提供了四个 子功能:
    • UI: 一个 web 管理页面 ui
    • API: Harbor 暴露的 API 服务
    • Auth: 用户认证服务,decode 后的 token 中的用户信息在这里进行认证;auth 后端可以接 db、ldap、uaa 三种认证实现
    • Token服务: 负责根据用户在每个 project 中的 role 来为每一个 docker push/pull 命令发布一个 token,如果从 docker client 发送给 registry 的请求没有带 token, registry 会重定向请求到 token 服务创建 token
  • Registry: 对应启动组件 registry。负责存储镜像文件,和处理镜像的 pull/push 命令。Harbor 对镜像进行强制的访问控制,Registry 会将客户端的每个 pull、push 请求转发到 token 服务来获取有效的 token
  • Admin Service: 对应启动组件 harbor-adminserver。是系统的配置管理中心附带检查存储用量, ui 和 jobserver 启动时候需要加载 adminserver 的配置
  • Job Sevice: 对应启动组件 harbor-jobservice。负责镜像复制工作的,他和 registry 通信,从一个 registry pull 镜像然后 push 到另一个 registry,并记录 job_log
  • Log Collector: 对应启动组件 harbor-log。日志汇总组件,通过 docker 的 log-driver 把日志汇总到 一起
  • DB: 对应启动组件 harbor-db,负责存储 project、 user、 role、replication、image_scan、 access 等的 metadata 数据

2. 安装 Harbor

下载地址: https://github.com/goharbor/harbor/releases

首先确保 docker 和 docker compose 已安装,并且 docker compose 必须先于 harbor 安装,否则会报错误

注意:docker、 docker compose、 harbor 版本要符合要求不然会安装失败,建议都用最新版本

以 http 模式安装 harbor

下载 Harbor 安装包并解压缩

bash 复制代码
# 下载离线完整安装包,推荐使用,下载好上传到 /root 目录
[root@Ubuntu2204 ~]#pwd
/root
[root@Ubuntu2204 ~]#ls
harbor-offline-installer-v2.12.2.tgz 

# 解压缩离线包
[root@Ubuntu2204 ~]#mkdir /apps
[root@Ubuntu2204 ~]#tar -xvf harbor-offline-installer-v2.12.2.tgz -C /apps/
[root@Ubuntu2204 ~]#mv /apps/harbor/harbor.yml.tmpl /apps/harbor/harbor.yml

# 只需要修改下面两行 并把 https 相关的先注释了
[root@Ubuntu2204 ~]#vim /apps/harbor/harbor.yml

hostname: 10.0.0.100			# 修改此行,指向当前主机 IP 或 FQDN
harbor_admin_password: 123456	# 修改此行指定 harbor 登录用户 admin 的密码

先把这几行注释了,先不走 https
 12 # https related config
 13 #https:
 14   # https port for harbor, default is 443
 15  # port: 443
 16   # The path of cert and key files for nginx
 17   #certificate: /your/certificate/path
 18   #private_key: /your/private/key/path
 19   # enable strong ssl ciphers (default: false)
 20   # strong_ssl_ciphers: false

# 运行 harbor 安装脚本
[root@Ubuntu2204 ~]#/apps/harbor/install.sh

#  实现开机自动启动 harbor
方法1: 通过 service 文件实现

[root@Ubuntu2204 ~]#vim /lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f  /apps/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /apps/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl enable harbor

方法2: 通过 rc.local 实现
[root@Ubuntu2204 ~]#vim /etc/rc.local
#!/bin/bash
cd /apps/harbor
/usr/local/bin/docker-compose up

[root@Ubuntu2204 ~]#chmod +x /etc/rc.local

安装成功后在浏览器输入本机 IP 地址访问

账号:admin

密码:123456

建立项目

harbor上必须先建立项目,才能上传镜像

命令行登录 harbor

重新找一台安装 docker 的主机进行测试

bash 复制代码
[root@Ubuntu2204 ~]#cat /etc/docker/daemon.json 
{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.m.daocloud.io"
        ],
    "insecure-registries": ["10.0.0.110"] 	# harbor IP 地址
}

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl restart docker

# 登录 harbor 仓库
[root@Ubuntu2204 ~]#docker login 10.0.0.110
Username: 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

# 查看存储 Docker 的认证信息等
[root@Ubuntu2204 ~]#cat .docker/config.json 
{
	"auths": {
		"10.0.0.110": {
			"auth": "YWRtaW46MTIzNDU2"
		}
	}
}

# 给本地镜像打标签并上传到 Harbor
[root@Ubuntu2204 ~]#docker tag alpine:latest 10.0.0.110/test/alpine:v1.0
[root@Ubuntu2204 ~]#docker push 10.0.0.110/test/alpine:v1.0

注意:上传镜像前,必须先登录 harbor
	 修改 images 的名称,不修改成指定格式无法将镜像上传到 harbor 仓库
	 Harbor主机IP/项目名/image名:版本
	 如果不事先建立项目,会上传镜像失败

查看 alpine:v1.0 上传成功

下载 Harbor 的镜像

重新找第二台安装 docker 的主机进行测试

下载前必须修改 docker 的 service 文件,加入harbor服务器的地址才可以下载

无需登录,即可下载镜像

bash 复制代码
[root@Ubuntu2204 ~]#cat /etc/docker/daemon.json 
{
    "insecure-registries": ["10.0.0.110"] 	# harbor IP 地址
}

[root@Ubuntu2204 ~]#systemctl daemon-reload; systemctl restart docker
[root@Ubuntu2204 ~]#docker pull 10.0.0.110/test/alpine:v1.0
相关推荐
桃林春风一杯酒31 分钟前
HADOOP_HOME and hadoop.home.dir are unset.
大数据·hadoop·分布式
亲持红叶4 小时前
open-webui安装
docker·open-webui
伪装成塔的小兵4 小时前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
逻各斯5 小时前
Redisson分布式锁java语法, 可重入性实现原理 ,(还有可重试性,超时不释放,主从一致性)
分布式
WeiLai11126 小时前
面试基础--微服务架构:如何拆分微服务、数据一致性、服务调用
java·分布式·后端·微服务·中间件·面试·架构
奔跑吧邓邓子6 小时前
【Python爬虫(44)】分布式爬虫:筑牢安全防线,守护数据之旅
开发语言·分布式·爬虫·python·安全
奔跑吧邓邓子7 小时前
【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
开发语言·分布式·爬虫·python·大数据框架
m0_748232927 小时前
分布式与集群,二者区别是什么?
分布式
guihong0047 小时前
Redis 深度解析:高性能缓存与分布式数据存储的核心利器
redis·分布式·缓存