专栏首页杂烩Centos7安装Docker私服Harbor

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 条评论
登录 后参与评论

相关文章

  • Rancher流水线配置文档

        注意创建页面配置镜像版本号时,使用环境变量${CICD_EXECUTION_SEQUENCE}

    尚浩宇
  • Rancher2.1.4使用记录 原

        说实话,Rancher的官方文档真的很全,围绕着UI的方方面面都面面俱到。但看多了却发现,很多东西都浅尝辄止,尤其某个东西实在不懂的时候,看文档只能让自...

    尚浩宇
  • 一个综合的分布式项目之项目架构 原

        限于服务器资源,这里除了服务上下游各有两台,其他没做集群。总共9台服务器,其中八台是centos7虚拟机,各有2G内存,还有一台是windows装的my...

    尚浩宇
  • 你必须知道的Docker镜像仓库的搭建

    近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜...

    心莱科技雪雁
  • John Willis:Docker 与实现 DevOps 的三种方式

    作者简介 John Willis,Docker 布道师,已经在 IT 管理行业浸淫 30 余年,之前在 Socketplane(被Docker 收购)和 Ens...

    DevOps时代
  • 请说明Java集合类框架的基本接口有哪些?

    集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。

    剑走天涯
  • Docker带你重玩2048

    2048 是2014年很火的一款移动端小游戏,Docker 是2013年兴起的一项很火的容器技术,那么把二者结合起来又会摩擦出怎样的火花?本文将带你走进Dock...

    暮雨
  • 腾讯V+俱乐部计划正式启动,与100家合作伙伴共创百亿价值

    ? 9月11日,在腾讯2020全球数字生态大会音视频通信专场上,腾讯云正式宣布启动V加俱乐部计划,携手音视频领域合作伙伴共创百亿价值。 V加俱乐部是腾讯云打造...

    腾讯云视频
  • 规范-编码

    py3study
  • 教你在不使用框架的情况下也能写出现代化 PHP 代码

    我为你们准备了一个富有挑战性的事情。接下来你们将以无框架的方式开启一个项目之旅。 首先声明, 这篇并非又臭又长的反框架裹脚布文章。也不是推销非原创(https:...

    程序员宝库

扫码关注云+社区

领取腾讯云代金券