基于registry的Harbor镜像仓库部署
Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理UI,可基于角色访问控制, AD/LDAP 集成,日志审核等功能,完全的支持中文。 Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。
一、简介
Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。
1、优点
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
- 1.提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。 - 2.提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。 - 3.支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。 - 4.良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。 - 5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
2、核心组件
- Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
- db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
- UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
- jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
- Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
- Registry:镜像仓库,负责存储镜像文件。
- Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
二、安装部署
1、环境要求
Hardware
Resource | Capacity | Description |
---|---|---|
CPU | minimal 2 CPU | 4 CPU is preferred |
Mem | minimal 4GB | 8GB is preferred |
Disk | minimal 40GB | 160GB is preferred |
Software
Software | Version | Description |
---|---|---|
Python | version 2.7 or higher | Note that you may have to install Python on Linux distributions (Gentoo, Arch) that do not come with a Python interpreter installed by default |
Docker engine | version 1.10 or higher | For installation instructions, please refer to: https://docs.docker.com/engine/installation/ |
Docker Compose | version 1.6.0 or higher | For installation instructions, please refer to: https://docs.docker.com/compose/install/ |
Openssl | latest is preferred | Generate certificate and keys for Harbor |
Network ports
Port | Protocol | Description |
---|---|---|
443 | HTTPS | Harbor portal and core API will accept requests on this port for https protocol |
4443 | HTTPS | Connections to the Docker Content Trust service for Harbor, only needed when Notary is enabled |
80 | HTTP | Harbor portal and core API will accept requests on this port for http protocol |
Docker 相关
安装docker-compose
1 | yum install python-pip |
2、安装方式
在线安装
该方式从Docker hub下载Harbor相关镜像,安装包较小。
离线安装
- 正常安装版 https://img.econow.cn/harbor-offline-installer-v1.2.2.tgz 推荐使用此方式靠谱。
- github下载最新版 Harbor offline installer
3、安装
1 | cd /usr/src |
修改配置文件
vim harbor.cfg
1 | ## Configuration file of Harbor |
1、修改80端口为5000
1 | # vim docker-compose.yml |
处理模板
1 | #vim common/templates/registry/config.yml |
启动,执行安装,加载镜像
1 | ./install.sh |
更改配置后执行 prepare 脚本
1 |
|
1 | # docker-compose up -d 启动 |
访问ip:5000 就可以了
默认帐号密码admin/Harbor12345
然后创建用户和项目,注意区分公开还是私有。
2、修改存储目录
默认情况下存在在/data目录,很多时候还是需要修改一下目录的。
1 |
|
3、修改数据库为外置MySQL
1 | #docker exec -i -t 6e1e4b576315 bash |
1 | cd common/templates/adminserver |
docker-compose.yml删除 MySQL部分配置,包括proxy里面的- mysql。
不过需要注意需要删除 /data/config/config.json 文件。
重启
1 | docker-compose stop |
验证登录正常,OK!!!
三、推送镜像
1、检查是否包含镜像地址,如果不包含则执行第2步
2、增加仓库地址
1 | vim /usr/lib/systemd/system/docker.service |
部分低版本的则是修改其他文件
1 | #vim /etc/docker/daemon.json |
3、构建并推送
1 | docker build -t ip:5000/base/jdk . |
之后在浏览器检查是否正常即可。