镜像仓库:Harbor
Harbor 是存储和分发 Docker 镜像的企业级 Registry 服务器,也支持 Helm 仓库,由 VMware 开源
一、介绍
- 基于角色的访问控制
用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 基于镜像的复制策略
镜像可以在多个 Registry 实例中复制(可以将仓库中的镜像同步到远程的 Harbor,类似于 MySQL 主从同步功能),尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面
用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
- 支持 AD/LDAP
Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
- 镜像删除和垃圾回收
Harbor 支持在 Web 删除镜像,回收无用的镜像,释放磁盘空间;image 可以被删除并且回收 image 占用的空间。
- 审计管理
所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- RESTful API
RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易。
- 部署简单
提供在线和离线两种安装工具,也可以安装到 vSphere 平台(OVA 方式)虚拟设备。
二、架构
- Proxy:反向代理工具
- Registry:负责存储 docker 镜像,处理上传/下载命令。对用户进行访问控制,它指向一个 token 服务,强制用户的每次 docker pull/push 请求都要携带一个合法的 token,registry 会通过公钥对 token 进行解密验证。
- Core service:Harbor 的核心功能:
- UI:图形界面
- Webhook:及时获取 registry 上 image 状态变化情况,在 registry 上配置 webhook,把状态变化传递给 UI 模块。
- Token 服务:复杂根据用户权限给每个 Docker
- Push/Pull 命令签发 Token。Docker 客户端向 registry 服务发起的请求,如果不包含 token,会被重定向到这里,获得 token 后再重新向 registry 进行请求。
- Database:提供数据库服务,存储用户权限,审计日志,docker image 分组信息等数据
- Log collector:为了帮助监控 harbor 运行,复责收集其他组件的 log,供日后进行分析
三、部署
Harbor 的所有组件都在 Docker 中部署,所以 Harbor 可使用 Docker Compose 快速部署(Harbor 是基于 Docker Registry V2 版本,所以 Docker 版本必须 > = 1.10.0 Docker-Compose >= 1.6.0);官方列出了需要部署的组件,如下图:
点击下载最新的离线安装包,也可以在线安装
上传并解压,然后修改 yml 配置文件
1 | cd /app/service |
配置主机地址和端口等(提时:主机名不要使用 localhost 和 127.0.0.1)
然后进行安装
1 | ./install.sh |
会先检查是否安装 Docker 和 Docker-Compose 及其版本
可以使用 http://127.0.0.1:prot 访问私有仓库
账号:admin
密码:Harbor12345
登录进去可以修改密码,以及其他的操作
之后命令
1 | vi docker-compose.yml |
修改配置给 Docker 添加私有仓库,http 需要使用不安全的字段(insecure-registries)
1 | vi /etc/docker/daemon.json |
然后重启 Docker 生效
四、故障
1.端口冲突
Error response from daemon: Ports are not available: exposing port TCP 127.0.0.1:1514 -> 0.0.0.0:0: listen tcp 127.0.0.1:1514: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
报错信息来看时端口占用,搜索发现 Widnows Hyper-V 默认会排除一些端口
1 | netstat -ano | findstr 1514 |
2.解决办法
1.以管理员身份运行终端,临时关闭 Hyper-V 和 winnat 网络
1 | dism.exe /Online /Disable-Feature:Microsoft-Hyper-V |
2.使用以下命令永久排除指定端口作为保留端口(端口被占用需要先重启下)
1 | netsh int ipv4 add excludedportrange protocol=tcp startport=1514 numberofports=1 store=persistent |
关键在于 store=persistent
参数表示持久化信息,然后设置起始端口,已经后面的个数
3.再开启 Hyper-V 和 winnat 网络,1514 端口就从保留端口排除了
1 | dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All |
重新开启 Hyper-V 没有进行重启,其实桌面系统可以不开启这个