harbor私有仓库部署
介绍
harbor是docker的私有仓库,可以部署在局域网服务器上,用来管理docker镜像.虽然docker官方也提供公共镜像仓库,但是由于是境外网站,拉取镜像速度非常慢,而且有被墙的可能.部署私有仓库非常有必要
harbor是vmware公司开源的企业级的docker registry管理项目.
处于数据脱敏需要,以下内容中隐藏了真实域名.而使用hub.xxxxxx.com替代
社区
harbor github: goharbor/harbor
官网文档介绍: harbor doc
在部署中遇到的各种坑,都可以通过查阅文档,或者搜索github的issue解决
框架
harbor是docker-compose部署的.包括一系列组件:nginx.core,log,register等等.
但是由于本机已经存在一个Nginx镜像.所以用Nginx代理到harbor的Nginx.如果是独立的服务器部署Harbor的话,则不会存在这个问题,可以直接跳过这一章节.
nginx代理框架大概是:
nginx—->harbor-nginx—–>habor
由于docker提交镜像需要Https协议,所以:
nginx—301跳转到nginx https—–>harbor-nginx http—-> habor
但是这样的部署方式,有一个问题:
私有仓库可以正常login但是push镜像的时候,又提示未验证.
该问题尝试过很多解决方案,但是均无法解决
1 | [root@idc-function-docker ~]# docker login --username=admin -pHarbor12345 hub.xxxxxx.com |
所以现在的架构是
nginx—301跳转到Nginx https——> harbor-nginx https——>harbor
harbor部署前提条件
- 安装docker-ce
- 安装docker-composer
- 准备一个空目录.比如/data.或者/data/harbor (注意,最好是空目录,不要和其他项目混杂一起)
- 安装好https域名证书
具体步骤
docker和docker-compose的安装就略过了.这里提一句,我用的是acme.sh部署letsencrypt的证书
接下来开始部署harbor
- 1.去github下载离线安装包.离线安装包虽然比较大,但是安装过程快速,且不会中断
这里安装的是最新版,v1.10.1.
1 | 在github下载 harbor-offline-installer-v1.10.1.tgz |
- 2.解压后,进入harbor文件,编辑harbor.yaml配置文件.需要改动以下几个地方
1 | hostname hub.xxxxxx.com #定义主机名,可以使用IP,也可以用域名 |
- 3.执行install.sh文件.
1 | #该脚本会检查主机的环境,拉取相关镜像.以及根据配置文件生成docker-compose文件. |
这个脚本执行到最后会报错,提示80端口和nginx容器已经被占用了.但是没关系.
- 4.修改docker-composer文件.(如果本机上没有nginx或者80端口没有被占用,这一步可以不做)
1 | #将Nginx容器名改成hub-nginx |
- 启动docker-compose
1 | [root@idc-function-docker harbor]#docker-compose up -d |
- 宿主机的nginx开启代理. (如果不是采用nginx代理的话,可以忽略这一步)
1 | #我这里是有一个独立的Nginx容器 |
至此,部署就完成了.
我之前在部署的过程中遇到无数的坑,,可能都是由于harbor没有使用Https引起的
浏览器访问https://hub.xxxxxx.com,用初始的账号密码登陆,可以新建项目,创建用户等.
我这里创建了一个master的公开项目
登陆和push镜像没有任何问题
1 | root@idc-function-docker ~]# docker login --username=admin -pHarbor12345 hub.xxxxxx.com |
在另外一台客户端上,尝试pull镜像不需要密码.如果需要密码pull镜像,可以将项目设置为私有
1 | [root@localhost ~]$docker pull hub.xxxxxx.com/master/nginx:latest |