Centos7安装Docker私服Harbor

一、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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郭耀华‘s Blog

onSaveInstanceState和onRestoreInstanceState触发的时机

先看Application Fundamentals上的一段话:  Android calls onSaveInstanceState() before t...

3217
来自专栏WeTest质量开放平台团队的专栏

一次触摸,Android 到底干了啥

通过 Android 系统输入子系统的分析来回答你。

2261
来自专栏分布式系统和大数据处理

基于Docker的持续集成方案(介绍) - Part.1

使用docker有很多的便利,这个就不再讲述了,在文章 《基于Docker的持续集成方案(安装docker) - Part.2》 已经对docker有所介绍。这...

4345
来自专栏素质云笔记

caffe镜像︱window10+docker+ubuntu14.04+caffe镜像的简单尝试

win10专业版可以利用Hyper-V开启docker,一般升级而来的都是家庭版,现在要升级到win10专业版, 需要产品秘钥。 github网址:h...

3309
来自专栏大魏分享(微信公众号:david-share)

厉害了word哥 | 从两张图看红帽最高深的武功 |OpenShift

世上的高手 世上高手大约有两种: 第一种如下图这为老先生,一辈子纵横江湖数十载,所学武功实用有效,招数简明而力道雄厚,善于“简单粗暴”迅速解决问题。在老爷子的心...

4957
来自专栏轻扬小栈

pogoplug openwrt 编译镜像下载

1391
来自专栏Coding01

初次学习 Docker Volume 的基本使用 (四)

在很早的一篇帖子里 http://dockone.io/question/24 就有人问:「请教下代码放在 Docker 里面还是外面呢」多数人评论类似下面的观...

992
来自专栏友弟技术工作室

docker微服务初体验配置文件composedocker compose使用

9185
来自专栏Java后端技术

Docker三十分钟快速入门(下)

  上篇文章我们进行了Docker的快速入门,基本命令的讲解,以及简单的实战,那么本篇我们就来实战一个真实的项目,看看怎么在产线上来通过容器技术来运行我们的项...

992
来自专栏Jerry的SAP技术分享

SAP云平台,Netweaver,Kubernetes和C4C的用户和角色关系

Kubernetes在1.3版本中发布了alpha版的基于角色的访问控制(Role-based Access Control,

852

扫码关注云+社区

领取腾讯云代金券