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 安装包并解压缩
# 下载离线完整安装包,推荐使用,下载好上传到 /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 的主机进行测试
[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服务器的地址才可以下载
无需登录,即可下载镜像
[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
到此这篇关于Docker 分布式仓库 Harbor的实现的文章就介绍到这了,更多相关Docker Harbor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!