作为一个深居墙内,或者是公司服务器无法连接网的测试,在引入新的工具或者平台的时候总会有这样的问题:即使使用 Docker 来安装部署,也会出现下载极慢,或者因为各种网络原因超时,甚至无法直接下载导致的安装错误或者无能无力。
那么在公司局域网内,部署一个企业级的 Docker 私库是非常有必要的,今天这篇文章就给大家介绍使用Harbor 搭建 Docker Registry服务器。
Harbor介绍
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由VMware中国研发的团队负责开发。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。
作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。
Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
Harbor组建
Harbor 由如下图所示几大组件构成:
Proxy:Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
Registry:负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。
Core services:这是Harbor的核心功能,主要提供以下服务:
UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。
webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。
token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Registry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
Job Services:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中。
Harbor的每个组件都是以Docker容器的形式构建的,官方也是使用Docker Compose来对它进行部署。
用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,打开这个模板文件,发现Harbor是由多个容器组成的:
Harbor安装
安装Harbor需要先安装docker和docker-compose。
关于Docker的安装这里复述,docker-compose 的安装官方提供了多种方式,最简单的做法就是使用 Python 的包管理器 pip 进行安装。
pip3 install docker-compose
Harbor 的安装推荐下载 offiline 安装包后安装。
下载地址:https://github.com/goharbor/harbor/releases
下载解压完成后可得到如下安装包:
重命名harbor.yml.tmpl 为 harbor.yml 文件后,修改配置 hostname、port、ssl认证等配置项;
启动安装脚本即可自动完成部署工作。
访问:http://ip:port 即可访问。
默认用户名与密码为:admin / Harbor12345
Harbor使用
创建项目(如不创建,会导致上传失败):
登录 :
docker login 10.0.0.19:88
为镜像打标签
docker tag ubuntu 10.0.0.19:88/mango/ubuntu:latest
上传镜像:
docker push 10.0.0.19:88/mango/ubuntu:latest
稍候即可在管理页面看到上传的镜像:
后记
关于 Docker 的使用,镜像的构建知识点非常多,如有需要可以关注我们的《运维从零开始课程》哟~
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/186773.html