Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /innev/projects/innev/lib/Zend/Cache/Backend.php on line 66
Docker私有仓库搭建(Registry + Portus)篇 Docker|Registy|Protus|Private|私有仓库 - Innev

Amaze UI

Docker私有仓库搭建(Registry + Portus)篇

Docker私有仓库搭建(Registry + Portus)

Docker Hub是一个很好的用于管理公共镜像的地方,我们可以在上面找到想要的镜像(Docker Hub的下载量已经达到数亿次);而且我们也可以把自己的镜像推送上去。但是,有的时候,使用场景需要我们有一个私有的镜像仓库用于管理自己的镜像,这个时候我们就通过Registry来实现此目的。本文详细介绍了本地镜像仓库Docker Registry & Portus的搭建过程(Portus是一个带UI管理的仓库管理软件),对于文中细节有兴趣或有疑问的朋友欢迎加群讨论。

准备工作

在部署Registry的之前,首先要考虑设计一个什么样Registry的仓库环境,是部署测试环境,还是生产环境。

如果是用于生产环境发布的Registry,必须考虑几个因素:
  1. 镜像使用什么样的存储?
  2. 怎么样为用户推送和拉取动作进行授权?
  3. 是否能够监控仓库的运行状况,日志是否可以查看?
  4. 如何快速提取镜像?(注:这是至关重要的,如果依赖镜像进行构建测试环境、生产环境或自动化系统,这是取决仓库是否有生命力的最重要指标。)

Registry搭建篇

安装与配置

1、Docker安装

卸载旧版本的docker。旧版本叫做docker或docker-engine,如果机器中安装的有旧版,那么首先请卸载他们。
  1. yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-selinux \
  9. docker-engine-selinux \
  10. docker-engine;
配置dockery源
  1. 安装依赖包
  2. sudo yum install -y yum-utils \
  3. device-mapper-persistent-data \
  4. lvm2
  5. 设置软件源
  6. sudo yum-config-manager \
  7. --add-repo \
  8. https://download.docker.com/linux/centos/docker-ce.repo;
  9. 启用 edge test
  10. sudo yum-config-manager --enable docker-ce-edge
  11. sudo yum-config-manager --enable docker-ce-test
安装docker-ce-edge版本
  1. sudo yum install docker-ce
启动docker
  1. systemctl start docker
运行一个 hello-world镜像来验证是否安装成功
  1. docker run hello-world

docker版本的选择
目前docker分为 CE(社区版)和EE(企业版),用户可以选择Stable(发布较慢)或者Edge(发布较快)版本。
我们选择CE版本中发行较快的Edge版本

2、Registry安装

  1. yum -y install docker-registry

Registry原理

Docker模型的核心部分是有效的利用分层镜像机制,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。不同的Docker容器可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。由于最终镜像最终是以tar.gz的方式静态存储在服务器端,这种存储适用于对象存储而不是块存储。

一次docker pull 发生的交互

pull

  1. ClientIndex请求,知道从哪里下载CentOS
  2. Index回复
  3. CentOSRegistryA
  4. CentOSChecksum,所有层的Token
  5. ClientRegistry A请求, CentOS的所有层。Registry A负责存储CentOS,以及它所依赖的层、
  6. Regsitry AIndex发起请求,验证用户Token的合法性
  7. Index返回这次请求是否合法
  8. ClientRegistry下载所有的层
  9. Registry从后端存储中获取实际的文件数据,返给Client

Registry配置

1、启动Registry容器

  1. docker run -d -p 5000:5000 --name registry -v /innev/registry:/var/lib/registry registry:2
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。运行docker ps看一下容器是否在运行
打开浏览器输入http://127.0.0.1:5000/v2 界面上出现 “ {} ” 说明Registry运行正常。

2、客户机访问Registry

对于需要访问Registry仓库的客户机来说,首先需要修改/etc/sysconfig/docker的配置文件:添加 —insecure-registry 192.168.0.251:5000 (如果仓库地址为192.168.0.251)

3、客户端向Registry存放镜像

首先,需要docker tag给需要上传的镜像文件打标。然后再从本地上传镜像到仓库。

4、客户端向仓库Pull镜像

在另外一台主机上使用pull从192.168.0.70的仓库中把镜像给Pull下来

通过以上操作就可以看到我们已经Pull的镜像,然后可以运行此镜像,开始你的应用之旅。到此应该说Registry基本搭建完成,但是仍然不适合实际的使用。因为不方便管理和查看到上传的镜像和权限设置。接下来我们介绍一个带UI管理的仓库管理软件—【Portus】

Portus搭建篇

Portus简介

Portus是SUSE为Docker Registry(v2)开发的一款开源的用户前端和授权管理软件。提供企业私有Docker Registry的用户和权限管理功能,并提供Web界面使得管理员能够更加简易的进行管理操作。可以简单的理解为通过Portus+Registry的结合来实现企业私有的Docker Hub部署和管理。

Portus安装

1、安装Docker-Compose

首先添加yum源 yum -y install epel-release
安装python-pip yum -y install python-pip
安装docker-compose pip install -U docker-compose

到这里docker-compse就完成了。

2、从Git到Portus的代码搭建

正常安装方法: 需要到Git Clone https://github.com/SUSE/Portus.git 上获取Portus的源码
进入到Portus目录然后运行 docker-compose up 创建容器。

3、安装Portus程序

4、修改Docker配置文件

Portus配置与验证

1、登录配置程序

2、上传镜像测试

3、下载镜像测试

Portus特性

Portus(by SUSE)是用于 Docker Registry API(v2)的开源前端和授权工具,最低要求注册表版本是 2.1。它可以作为授权服务器和用户界面,用于新一代的 Docker Registry。具有以下优点:

安全

Portus实现私有Docker Registry中所有镜像的权限管理,针对不同的镜像设置不同用户或组的Push和Pull权限。

轻松管理用户

在 Portus 映射你的公司,可以定义任意数量的 Team,并从 Team 添加和移除用户。Team 有三种类型的用户:Viewers ,只能 pull 镜像;Contributors,可以 push/pull 镜像;Owners,类似 contributors,但可以从 team 添加或移除用户。

搜索

Portus提供了私有仓库内容的概览,但是也可以通过搜索功能更快找到需要的镜像。

审计

用户的所有相关事件都会被Portus自动记录,并可被管理员进行用户分析。

Portus的功能还有很多,比如LDAP支持,操作审计等等。Portus权限管理的安全性和细粒度还算比较高,Repository层面设置不同用户和组的权限,用户层面又设置了不同的角色,通过多方面的授权实现镜像的安全性管理。个人觉得如果企业内部的开发测试环境需要一个私有的Registry的话,可以考虑采用Portus。

Registry v2验证过程

Docker Client通过Docker Daemon拉取镜像白话版:
  1. 我要搬货
  2. 没授权,去相关部门开单子(拿Token)
  3. 我要搬货,这是我的申请单(提交用户名和密码申请Token)
  4. 核实信息,单子盖章(拿到Token)
  5. 我要搬货,这是授权单
  6. 通过,搬走

文章目录

Contact ME