搭建Docker私有仓库
Harbor简介
VMware开源的企业级Registry项目Harbor,以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,主要特点:
- 基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
- AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
- 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
- 部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备
Harbor架构
Proxy: Harbor的registry、UI、token services等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients的请求转发到后端服务上。
Registry: 负责存储Docker镜像,以及处理Docker push/pull请求。因为Harbor强制要求对镜像的访问做权限控制, 在每一次push/pull请求时,Registry会强制要求客户端从token service那里获得一个有效的token。
Core services: Harbor的核心功能,主要包括如下3个服务:
- UI: 作为Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。
- WebHook:WebHook是在registry中配置的一种机制, 当registry中镜像发生改变时,就可以通知到Harbor的webhook endpoint。Harbor使用webhook来更新日志、初始化同步job等。
- Token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
Job services: 主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
Log collector: 负责收集其他组件的日志到一个地方
harbor-adminserver主要是作为一个后端的配置数据管理,harbor-ui所要操作的所有数据都通过harbor-adminserver这样一个数据配置管理中心来完成。
Harbor安装
安装Docker
Harbor各个组件全部基于docker,在安装Harbor之前,需要预先安装docker、docker-compose
下载Harbor安装脚本
从https://github.com/goharbor/harbor/releases仓库中下载Harbor安装脚本,如果目标机器可以连接网络的话,下载在线安装版的就可以。
解压harbor安装包
1 | tar xf harbor-online-installer-{}.tgz |
生成SSL自签名证书
Harbor使用Docker-compose启动,使用Nginx作为反响代理,建议部署在机器的80和443端口上,并且进行SSL自签名,这样的话其他机器下载镜像时就不需要配置docker的信任仓库。
下面是生成SSL签名的流程,需要在机器上提前安装openssl
软件包。
把下边代码中所有的IP地址都替换成您自己的IP地址。
1 | 生成默认 ca |
如果运行成功,会在当前目录下生成ca.key
和ca.pem
两个证书文件,在接下来修改Harbor配置文件的时候需要修改这两个文件路径
修改Harbor配置文件
重命名harbor.yml.tmpl
为harbor.yml
。该配置文件中需要注意的参数如下,其他的保持默认配置即可。
1 | hostname: 192.168.0.8 //设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost。默认情况下,harbor使用的端口是80,若使用自定义的端口,除了要改docker-compose.yml文件中的配置外,这里的hostname也要加上自定义的端口,否则在docker login、push时会报错 |
运行Harbor
配置完毕之后就可以启动Harbor,运行安装脚本,Harbor就会自动安装。
1 | ./install.sh |
进入Harbor
之后访问Harbor的WEB页面,默认用户名为admin
,密码为Harbor12345