harbor简介

Harbor 是一个企业级 Registry 服务。它对开源的 Docker Registry 服务进行了扩展,添加了更多企业用户需要的功能。Harbor 被设计用于部署一套组织内部使用的私有环境,这个私有 Registry 服务对于非常关心安全的组织来说是十分重要的。另外,私有 Registry 服务可以通过避免从公域网下载镜 像而提高企业生产力。这对于没有良好的 Internet 连接状态,使用 Docker Container 的用户是一个福音。

  • 基于角色的访问控制:用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 图形化用户界面:用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
  • 审计管理 :所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化:基于英文与中文语言进行了本地化。可以增加更多的语言支持。
  • RESTful API - RESTful API :提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

主要组件

  • Proxy:Harbor 的 registry, UI, token 等服务,通过一个前置的反向代理统一接收浏览器、Docker 客户端的请求,并将请求转发给后端不同的服务。
  • Registry:负责储存 Docker 镜像,并处理 docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对 Docker image 有不同的读写权限,Registry 会指向一个 token 服务,强制用户的每次 docker pull/push 请求都要携带一个合法的 token, Registry 会通过公钥对 token 进行解密验证。
  • Core services:这是 Harbor 的核心功能,主要提供以下服务: UI:提供图形化界面,帮助用户管理 registry 上的镜像(image),并对用户进行授权;
  • webhook:为了及时获取 registry 上 image 状态变化的情况, 在 Registry 上配置 webhook,把状态变化传递给 UI 模块;
  • token 服务:负责根据用户权限给每个 docker push/pull 命令签发 token。Docker 客户端向Registry 服务发起的请求,如果不包含 token,会被重定向到这里,获得 token 后再重新向 Registry进行请求;
  • Database:为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
  • Log collector:为了帮助监控 Harbor 运行,负责收集其他组件的 log,供日后进行分析。

harbor部署、使用

  (1)下载离线安装包、解压

  在github下载harbor;

  下载链接:https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-offline-installer-v1.4.0.tgz

  node02       IP:192.168.3.201/24

  

  [root@node02 ~]# tar xf harbor-offline-installer-v1.4.0.tgz -C /usr/local/    #解压到/usr/local/

  [root@node02 ~]# systemctl  stop docker-distribution.service         #如果主机上有docker distribution,要先停掉

    [root@node02 ~]# cd /usr/local/harbor/

  

  [root@node02 harbor]# vim harbor.cfg

         ...

     hostname = 192.168.3.201    #文件中这一项要修改,其他的看个人需求,只能写ip,我的写主机名不行,写进hosts文件也不行

         ...

  

  (2)安装

  安装docker-compose

     [root@node02 harbor]# yum install epel-release -y         #docker-compose在epel仓库中,要先装epel

    [root@node02 harbor]# yum -y install docker-compose

  安装harbor:

    [root@node02 harbor]# ./install.sh

          ...

     ----Harbor has been installed and started successfully.----      #最后看到这一行,证明安装成功

          ...

    

  查看端口,harbor直接用的就是80端口:

    [root@node02 harbor]# netstat -ntlp |grep "80"
    

  harbor的操作命令:

    • 如果需要修改Harbor的配置文件harbor.cfg,因为Harbor是基于docker-compose服务编排的,我们可以使用docker-compose命令重启Harbor。
    • 重启Harbor命令:docker-compose start | stop | restart
    • 暂停、恢复:docker-compose pause 、 docker-compose unpause
    • 帮助:docker-compose --help

 

  (3)web页面访问

  用浏览器直接访问:192.168.3.201 

  默认账号、密码:admin    Harbor12345

  

  (4)将镜像推送到harbor

  比如要把node01上的镜像推送到Harbor: 

  修改node01的配置文件:
    [root@node01 ~]# vim /etc/docker/daemon.json

    {
    "registry-mirrors": ["https://fwas9x15.mirror.aliyuncs.com","https://registry.docker-cn.com"],
    "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],
    "insecure-registries": ["192.168.3.201"]      #因为Harbor默认监听的80端口,所以不用写端口;而且只能写ip,写主机名不行,写进hosts文件也不行
    }

    “我的这里只能写IP,写主机名不行,修改hosts文件也不行”

    [root@node01 ~]# systemctl restart docker      #重启docker

    [root@node01 ~]# docker login 192.168.3.201     #登录harbor(node02:192.168.3.201)

    这里登陆的账号信息,会保存在本机的/root/.docker/config.json中 

  推送:

    在harbor上新建一个项目叫weiyiming;

    

    查看推送命令:

    

    [root@node01 ~]# docker tag busybox 192.168.3.201/weiyiming/busybox:latest    #打标一个镜像,
    [root@node01 ~]# docker push 192.168.3.201/weiyiming/busybox         #推送,这里的weiyiming是新建的项目

    可以看到已经推送到harbor了,如下图:

    

Harbor安装部署--基于 Docker Distribution 的企业级 Registry 服务的更多相关文章

  1. QCon技术干货:个推基于Docker和Kubernetes的微服务实践

    2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...

  2. docker初识-docker安装、基于docker安装mysql及tomcat、基本命令

    一.docker是什么 用go语言开发,开源的应用容器引擎,容器性能开销极低 二.整体架构图 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 r ...

  3. 基于docker构建jenkins和svn服务(转)

    码农们很定都知道svn的重要性,机器坏掉丢代码的惨痛教训想必很多人都有. jenkins可能很多人都不了解.这是一个持续集成的工具,在敏捷开发领域很流行:跟svn结合可以实现定期build.check ...

  4. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

    本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...

  5. 基于Docker的负载均衡和服务发现

    应用的容器化和微服务化带来的问题 在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情 IP频繁发生变动,动态应用部署无法预知容器的IP地址,clie ...

  6. 开启和安装Kubernetes 基于Docker For Windows

    0.最近发现,Docker For Windows Stable在Enable Kubernetes这个问题上是有Bug的,建议切换到Edge版本,并且采用下文AliyunContainerServi ...

  7. 在ubuntu14.04上部署基于Docker的Gitlab

    首先在一台新的ubuntu上执行更新: sudo apt-get update 然后安装docker(采用国内源) curl -sSL https://get.daocloud.io/docker | ...

  8. 基于Docker + Consul + Nginx + Consul-Template的服务负载均衡实现(转)

    转:https://www.jianshu.com/p/fa41434d444a 前言 上一篇文章使用 Consul 和 Registrator 在 docker 的容器环境中搭建了服务注册和发现集群 ...

  9. 基于docker,consul,consul-template, registrator, nginx服务注册发现集群

      介绍 该工程主要实现服务的自动注册发现,从而达到提高运维效率,做到服务的自动发现和动态扩展. 服务注册发现 服务启动后自动被发现 动态变更负载均衡 自动伸缩 工具 1.Registrator 这是 ...

随机推荐

  1. Spring -- Bean自己主动装配&Bean之间关系&Bean的作用域

    对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...

  2. uboot1.1.6中启动流程

    U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø 跳转到第二阶段代码入口 (2 ...

  3. MYiSAM和InnoDB引擎区别(mysql)

    MyISAM 1.读取速度快. 2.※更新时锁整个表. 3.占用资源少. 4.适合读多写少的业务. 5.※不支持事务.   InnoDB 1.读取速度一般. 2.※更新时锁当前行. 3.占用资源高. ...

  4. 给EasyUi的Form加入自己主动填充部分输入框的方法

    依据项目须要,基于获取的数据对Form的部分输入框进行填充,而默认的EasyUI的Form 没有该方法.仅仅能一个输入框一个输入框的直接赋值,为此添加了Form对象的setValues,实现依据给定的 ...

  5. UVA 10887 Concatenation of Languages 字符串hash

    题目链接:传送门 题意: 给你两个集合A,B,任意组合成新的集合C(去重) 问你最后C集合大小 题解: 暴力 组成的新串hash起来 #include<bits/stdc++.h> usi ...

  6. Node中的promise简说及入门

    Node的特色之一就是异步回调,可是回调过多,就会形成著名的回调金字塔. 直接上例子,我要读取1.txt里的内容,然后在这个内容上加上'test'并重新写入文件,如下代码所示: var fs = re ...

  7. Qt & opencv 学习(一)

    Qt也没怎么系统学过,opencv也没系统学过.慢慢来,一步一步弄清楚吧. 天嵌科技有个文档,先去看这个文档,主要是开发环境的配置.文档名字就是QT应用程序开发手册-20150918.pdf.在QT里 ...

  8. CLI和CGI的区别

    CGI :“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上.以CGI方式运行时,web s ...

  9. 微信小程序 navigateTo 传对象参数

    当微信小程序navigateTo传入参数是个object时,请使用JSON.strtingify将object转化为字符串,代码如下: wx.navigateTo({ url: '../sendChe ...

  10. express 中文文档

    express() 创建一个express应用程序 var express = require('express'); var app = express(); app.get('/', functi ...