前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Centos7安装Docker私服Harbor

Centos7安装Docker私服Harbor

作者头像
尚浩宇
发布2018-08-17 11:22:21
8350
发布2018-08-17 11:22:21
举报
文章被收录于专栏:杂烩杂烩

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

代码语言:javascript
复制
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

代码语言:javascript
复制
pip install docker-compose

4.2 在线安装

    Harbor支持离线和在线两种方式,这里选择最省事的在线安装,注意offline是离线,online是在线。下载地址https://github.com/vmware/harbor/releases

    安装包所在服务器是在国外,可能比较慢,访问外国网站可快速下载,不翻稍微等下也能获取到,大小只有30K,不要以为下错了,真的只有30K。

    下载完成后,上传到服务器,然后解压并进入根目录。

    如果是HTTP方式,这里应该是修改harbor.cfg,然后执行脚本了。但我们不是,我们用的是HTTPS。

4.2.1 证书

    首先需要生成个人证书。 

代码语言:javascript
复制
openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout ca.key \
    -x509 -days 365 -out ca.crt

    按提示输入即可,输入完成后会在当前文件夹下生成ca.key和ca.crt两个文件。    

    然后生成证书签名请求

代码语言:javascript
复制
openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
    -out yourdomain.com.csr

    注意其中yourdomain.com,如果希望是通过域名方式访问私服,那么在执行命令时,提示的通用名称必须是完整的域名,比如harbor.docker.com,其他在命令里的只需要输入docker.com即可。

    最后然后按照访问方式(域名|IP)生成注册表主机的证书

    域名

代码语言:javascript
复制
openssl x509 -req -days 365 -in yourdomain.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out yourdomain.com.crt

    IP

代码语言:javascript
复制
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/

代码语言:javascript
复制
  cp yourdomain.com.crt /root/cert/
  cp yourdomain.com.key /root/cert/ 

    接下来,编辑文件harbor.cfg,更新主机名和协议,并更新属性ssl_cert和ssl_cert_key:

代码语言:javascript
复制
  #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生成配置文件

代码语言:javascript
复制
./prepare

    如果不小心以http方式启动了,没关系,执行如下命令停止并删除(系统数据不会跟随删除,系统数据保存在文件系统上)

代码语言:javascript
复制
docker-compose down  

    最后重启

代码语言:javascript
复制
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命令来验证设置,例如

代码语言:javascript
复制
docker login reg.yourdomain.com

4.4 示例

    现在将nginx这个镜像推到私服里。

    首先下载镜像

代码语言:javascript
复制
docker pull nginx

    然后打个标签

代码语言:javascript
复制
docker tag nginx reg.yourdomain.com/library/nginx:0.1

    最后推送到Harbor

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Harbor简介
  • 二、本文重点
  • 三、环境
    • 3.1 基础环境
      • 3.2 Harbor依赖环境
      • 四、安装
        • 4.1 依赖安装
          • 4.2 在线安装
            • 4.2.1 证书
            •  4.2.2 配置
          • 4.3 验证
            • 4.4 示例
            • 5 参考
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档