2019独角兽企业重金招聘Python工程师标准>>>
一、Harbor简介
Harbor是由供职在VMWARE的几个中国人合伙研发,市面上已经存在众多Docker私服,为啥还会出现Harbor?因为Harbor的重心不同于其他,Harbor的重心在于管理。如:不同的人看到不同的镜像,多私服联通等等,并且贴合国情,量身打造的。中文页面,更是降低了入门门槛。官方网站:https://vmware.github.io/harbor/cn
下面是Harbor的自我介绍。
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
- 基于角色的访问控制 - 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制 - 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
- AD/LDAP 支持 - Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API - RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
- 部署简单 - 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
二、本文重点
为什么说Docker私服Harbor,而不是Docker镜像私服Harbor?了解Maven的同学应该知道,Maven获取依赖时,先检查私服上是否有,如果有就从私服下载,如果没有就从远程下载。但Harbor不一样,默认情况下,Harbor作为一个封闭的仓库来使用,比如一个镜像nginx,如果镜像nginx没有推送到Harbor,那么客户端是pull不到这个镜像的。可以修改Harbor的模式为镜像模式,镜像模式下,可以连接远程仓库缓存需要的镜像,但镜像模式下无法push镜像。
本文重点不是如何使用Harbor,因为Harbor的使用和其他私服并没有任何区别,都是基于Docker的API,比如tag、pull、push等。至于权限分配管理,都是中文页面,稍微捣鼓下就好了,并没有绕人得难点。
本文的重点是如何快速省事的搭建一套基于https的Harbor私服。
三、环境
3.1 基础环境
OS:Centos7
Docker:18.01.0
3.2 Harbor依赖环境
Python:2.7+(Centos7自带Python2.7.5)
Docker:1.10+
Docker Compose:1.6.0+
四、安装
4.1 依赖安装
pip
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar -vxf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2
python2.7 setup.py install
easy_install-2.7 pip
Docker Compose
pip install docker-compose
4.2 在线安装
Harbor支持离线和在线两种方式,这里选择最省事的在线安装,注意offline是离线,online是在线。下载地址https://github.com/vmware/harbor/releases
安装包所在服务器是在国外,可能比较慢,可快速下载,不翻稍微等下也能获取到,大小只有30K,不要以为下错了,真的只有30K。
下载完成后,上传到服务器,然后解压并进入根目录。
如果是HTTP方式,这里应该是修改harbor.cfg,然后执行脚本了。但我们不是,我们用的是HTTPS。
4.2.1 证书
首先需要生成个人证书。
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 365 -out ca.crt
按提示输入即可,输入完成后会在当前文件夹下生成ca.key和ca.crt两个文件。
然后生成证书签名请求
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
-out yourdomain.com.csr
注意其中yourdomain.com,如果希望是通过域名方式访问私服,那么在执行命令时,提示的通用名称必须是完整的域名,比如harbor.docker.com,其他在命令里的只需要输入docker.com即可。
最后然后按照访问方式(域名|IP)生成注册表主机的证书
域名
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt
IP
echo subjectAltName = IP:192.168.1.101 > extfile.cnf
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out yourdomain.com
.crt
4.2.2 配置
获取yourdomain.com.crt和yourdomain.com.key文件后,将它们放到如下目录中/root/cert/
cp yourdomain.com.crt /root/cert/
cp yourdomain.com.key /root/cert/
接下来,编辑文件harbor.cfg,更新主机名和协议,并更新属性ssl_cert和ssl_cert_key:
#set hostname
hostname = reg.yourdomain.com
#set ui_url_protocol
ui_url_protocol = https
......
#The path of cert and key files for nginx, they are applied only the protocol is set to https
ssl_cert = /root/cert/yourdomain.com.crt
ssl_cert_key = /root/cert/yourdomain.com.key
然后为Harbor生成配置文件
./prepare
如果不小心以http方式启动了,没关系,执行如下命令停止并删除(系统数据不会跟随删除,系统数据保存在文件系统上)
docker-compose down
最后重启
docker-compose up -d
4.3 验证
为Harbour设置HTTPS后,可以通过以下步骤进行验证:
打开浏览器并输入地址:https://reg.yourdomain.com。它应该显示Harbor的用户界面。
在具有Docker守护进程的机器上,确保选项“-insecure-registry”不存在,并且您必须将上述步骤中生成的ca.crt复制到/etc/docker/certs.d/reg.yourdomain.com(或您的注册表主机IP),如果该目录不存在,请创建它。如果您将nginx端口443映射到另一个端口,则应该创建目录/etc/docker/certs.d/reg.yourdomain.com:port(或您的注册表主机IP:端口)。然后运行任何docker命令来验证设置,例如
docker login reg.yourdomain.com
4.4 示例
现在将nginx这个镜像推到私服里。
首先下载镜像
docker pull nginx
然后打个标签
docker tag nginx reg.yourdomain.com/library/nginx:0.1
最后推送到Harbor
docker push nginx:0.1 reg.yourdomain.com/library/nginx:0.1
再次登录到Harbor的UI即可看到nginx:0.1的镜像。
5 参考
github地址:https://github.com/vmware/harbor
HTTPS配置说明:https://github.com/vmware/harbor/blob/master/docs/configure_https.md
清除镜像:https://blog.csdn.net/felix_yujing/article/details/78626907?locationnum=3&fps=1
注:新版harbor在配置管理页面可以配置定时清除垃圾文件,不用再手动清除垃圾镜像了。