harbor官网:官网
github地址:项目地址
文档:v1.10-release
介绍
Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。
Harbor核心组件
- 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,供日后进行分析。
Harbor和Registry对比
Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。
-
提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。 -
提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。 -
支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。 -
良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。 -
Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
Harbor搭建
环境依赖
- 操作系统:centos7
docker 17.06.0-ce+
docker-compose 1.18.0+
openssl
python
- 安装python
CentOS7默认自带已安装好
- 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #配置源
yum list docker-ce --showduplicates | sort -r #查看可用版本
yum install docker-ce -y #安装最新版本
systemctl start docker #启动服务
systemctl enable docker #开机自启
docker version #查看版本
- 安装docker-compose
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #国内镜像下载
chmod +x /usr/local/bin/docker-compose # 对二进制文件应用可执行权限
docker-compose --version #安装成功,查看版本
- 安装harbor
一定要下载offline离线安装包: 添加链接描述
V1.10.2
下载完成后,解压缩
cd harbor
vim harbor.yml
修改配置文件,主要修改hostname
hostname: 192.168.177.133
https注释掉,因为默认私有化仓库通讯使用http,需要部署证书才可以https不注释会报错
这个是后台登录密码,默认账户admin
harbor_admin_password: jl920529
其他不需要更改,就可以使用了,最基本部署
确认无误后,使用命令开始安装
./install.sh
- 安装成功
启动和停止(必须在docker-compose.yml目录下运行命令,如/home/Harbor目录)
docker-compose stop
docker-compose start
docker-compose restart
- 可以查看docker-compose目前的状态
docker-compose ps
- 浏览器访问ip地址如下界面就成功了
- docker 客户端设置及简单push pull操作
由于目前服务器没有部署证书,不能使用https服务,但是docker新版本目前默认使用https服务,所以需要更改客户端docker配置,否则docker客户端login的时候会失败
docker安装后对daemon.json进行配置
cd /etc/docker
vim daemon.json
{"insecure-registries": ["192.168.177.133"] #添加harbor服务器的ip或者域名}
更改后重新加载配置,重启docker服务
systemctl daemon-reload
systemctl restart docker
docker登录
docker login [harbor ip]
输入你的账户名密码即可
接下来pull 一个hello-world
docker pull hello-world
创建项目仓库
打标签
docker tag SOURCE_IMAGE[:TAG] 192.168.177.133/test/IMAGE[:TAG]
示例
docker tag hello-world 192.168.177.133/test/hello-world:1.0
查看标签
docker images
推送
docker push 192.168.177.133/test/IMAGE[:TAG]
示例
docker pull 192.168.177.133/test/hello-world:1.0
成功
harbor支持proxy功能
官方配置说明:
harbor支持proxy功能
但如果支持proxy功能,会导致无法使用pull/push功能
目前找到多方解决办法为pull/push 和 Proxy分开部署,然后通过mirror同步来实现
新版本是否修复这个问题还在调研中
v1.8.0 问题说明:
issues#120: issues#120
harbor helm k8s部署高可用集群:
harbor 配置https访问,默认是http,如果部署正式环境,虽然是局域网,但是后期安全性讲,https还是有必要的:
关于https,之前我们的操作都是阿里云,腾讯云免费证书,省事,相当于,直接获取公匙和私匙,然后配置即可
github issues # 7250 :设置Harbor支持同步数据库中镜像
记录下来,后续迁移或者数据丢失恢复会用到
github issues #6276:
pull image 缓存镜像无法在在harbor的管理面板中显示
出现了设置好以后无法实现harbor仓库没有的镜像自动从指定的镜像源获取,目前确认的功能就是可以通过habor本地镜像仓库缓存,但是无法在在harbor的管理面板中显示