使用Harbor搭建Docker私有仓库
Docker官方提供了Docker Hub作为Docker公共仓库,大家可以上传或者下载镜像。但是对于企业来说将生产环境的镜像放在公共仓库是不安全的,所以企业有必要搭建自己的私有仓库。Docker官方提供了开源的registry镜像,可以用于搭建Docker私有仓库。但是它没有管理界面,缺少运维和管理功能,并不适用于企业搭建
由VMware中国研发团队负责开发的开源企业级Docker Registry——Harbor,以Docker官方提供的开源registry为基础,增加了Web UI、用户权限管理、日志等一系列便于运维和管理的功能,可以帮助企业快速搭建企业级的Docker私有仓库。所以Harbor成为了第一选择
本文的主要内容为如何使用Harbor搭建Docker私有仓库,并简单说明下使用中的注意事项
系列文章
本文为【Docker & Kubernetes & GPU】系列文章中的一篇:
- Docker安装指南以及使用GPU
- 使用Harbor搭建Docker私有仓库(本文)
- 基于Docker的Kubernetes-1.12集群搭建
- 在Kubernetes集群中使用GPU资源
环境配置
本文实践的服务器环境为:
- CentOS Linux release 7.5.1804 (Core)
- 内核版本:3.10.0-862.3.2.el7.x86_64
- Docker-CE版本:18.09.0
- 所安装的Harbor版本为:1.6.1
1、Harbor安装指南
官方完整版安装指南:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
前置条件
Harbor是使用Docker Compose进行快速部署,所以需要确保机器已经安装Docker Compose与Docker。相关安装指南可参见:Docker安装指南以及使用GPU
更为具体的硬件、软件、端口要求可见下图。其中端口如果被占用的话,可以修改相应文件改变端口映射。下文会有具体说明
下载说明
首先先从GitHub上下载安装文件,分为在线安装版和离线安装版
因为Harbor的所有组件运行在容器中,所以在线版就是安装的时候会联网下载相应的Docker镜像,而离线版就是安装文件中包含了相应的镜像
但是需要注意的是无论在线还是离线,安装文件都存放在Google相应的网址中(需自行翻墙解决),但是在线版所需要的镜像国内联网可正常下载
安装配置
解压后目录下会有一个名为harbor.cfg
的文件,Harbor的所有安装配置都存在于这里。官方对每一个参数都有说明,主要包括网络、日志、邮件、CA、账号、数据库和LDAP、redis等相关参数设置,其中部分设置在安装后还可以在Web端修改
因为这里是公司内网使用,所以不需要做CA认证,直接http链接即可。所以唯一需要修改的就是hostname,需要修改为本机IP(如果不使用域名的话),其他的默认
安装
修改完配置以后,执行目录下的install.sh
文件便开始安装,然后会依次启动相关服务
在浏览器中打开所设置的hostname,看到登陆界面的话即为安装成功
转移数据目录
转移数据目录有两种方式:一种是将默认数据目录软链至其他路径,另外一种是修改相应配置。目前使用的是第一种
- 目录软链
Harbor所有数据文件(包括镜像)默认存储在/data
目录下,如果其所在的硬盘分区空间较小,可以将其转移到大的磁盘分区。例如我这里是根目录/
挂载在小硬盘上,/home
目录挂载在大硬盘上,所以将其转移到/home
目录下。前往Harbor目录,执行以下命令:
1 | docker-compose stop |
- 修改配置
注:因未完全摸清所有配置,不知有没有地方漏修改了,所以该方法没有经过测试
Harbor各个组件容器的启动配置在docker-compose.yml
文件中,所以可以在这里修改
打开该文件后,搜索所有volumes
关键字,可以在每个容器的volumes下面看到,数据在Host机器上的挂载只会在两个地方:/data
和./common
。将/data
修改为所需目录即可,例如/home/harborData
在Harbor的安装配置文件harbor.cfg
中也有部分数据路径设置,主要为ssh相关设置,也作出相应修改即可
修改前使用docker-compose down -v
停止并删除现有容器,修改完成后先执行.prepare
使配置生效,然后使用docker-compose up -d
重新创建容器并启动服务
端口修改
Harbor默认使用的端口是80(HTTP)、443和4443(HTTPS),如果存在端口占用冲突,可以进行修改
打开docker-compose.yml
文件,在proxy服务下面的ports参数部分,可以看到端口映射关系,冒号左边为Host所用端口,冒号右边为容器所用端口。根据自己的需要对Host所用端口进行修改即可
然后再打开harbor.cfg
文件,在hostname处IP(或域名)的后面增加所用端口
然后执行以下命令重启Harbor服务
1 | docker-compose down -v |
之后需要使用IP加端口才能访问Harbor服务
2、Harbor使用须知
在使用Harbor的过程中经常会遇见网络连接相关或者认证相关的错误,一般是由于以下几点没有设置或者做对。所以挑出来一起说明一下
PS:如果修改了Harbor所使用的端口,那么下面的内容中在IP或者域名后面均需要加上所使用的端口
- 修改Docker配置
如果Harbor配置的是HTTP链接,那么在需要使用私有仓库的机器上编辑/etc/docker/daemon.json
文件,在其中加上以下键值对。修改后需要重启Dockersystemctl restart docker
1 | "insecure-registries" : ["IP或者域名"] |
HTTPS链接无需修改
- 推送镜像
所推送的镜像命名要符合规范。例如
1 | docker push IP或者域名/library/镜像名:tag |
其中library为Harbor默认存在的项目。如果使用自建的项目,修改为相应的项目名即可
(Harbor必须有项目才可以使用,无项目名直接推送的话会报错)
推送前要先登录docker login IP或者域名
。并且需要已经加入所要推送到的项目(例如默认的library),这一项需要联系Harbor管理员进行添加
- 拉取镜像
拉取镜像时代码与推送一样,只是将push换为pull
如果所要拉取的镜像所在的项目是公开的,那么可以直接拉取不需要登录。否则需要是项目成员且需要登录才可以拉取