Docker官方提供了Docker Hub作为Docker公共仓库,大家可以上传或者下载镜像。但是对于企业来说将生产环境的镜像放在公共仓库是不安全的,所以企业有必要搭建自己的私有仓库。Docker官方提供了开源的registry镜像,可以用于搭建Docker私有仓库。但是它没有管理界面,缺少运维和管理功能,并不适用于企业搭建

由VMware中国研发团队负责开发的开源企业级Docker Registry——Harbor,以Docker官方提供的开源registry为基础,增加了Web UI、用户权限管理、日志等一系列便于运维和管理的功能,可以帮助企业快速搭建企业级的Docker私有仓库。所以Harbor成为了第一选择

本文的主要内容为如何使用Harbor搭建Docker私有仓库,并简单说明下使用中的注意事项

系列文章

本文为【Docker & 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
2
3
4
5
docker-compose stop
mkdir /home/root_data
mv /data /home/root_data
ln -s /home/root_data/data /data
docker-compose start
  • 修改配置

注:因未完全摸清所有配置,不知有没有地方漏修改了,所以该方法没有经过测试

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
2
3
docker-compose down -v
./prepare
docker-compose up -d

之后需要使用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

如果所要拉取的镜像所在的项目是公开的,那么可以直接拉取不需要登录。否则需要是项目成员且需要登录才可以拉取

References