Docker私有仓库搭建(Registry + Portus)篇 原创 Docker Registy Protus Private 私有仓库 Innev 05月19日发布 Docker私有仓库搭建(Registry + Portus) === >Docker Hub是一个很好的用于管理公共镜像的地方,我们可以在上面找到想要的镜像(Docker Hub的下载量已经达到数亿次);而且我们也可以把自己的镜像推送上去。但是,有的时候,使用场景需要我们有一个私有的镜像仓库用于管理自己的镜像,这个时候我们就通过Registry来实现此目的。本文详细介绍了本地镜像仓库Docker Registry & Portus的搭建过程(Portus是一个带UI管理的仓库管理软件),对于文中细节有兴趣或有疑问的朋友欢迎加群讨论。 ## 准备工作 在部署Registry的之前,首先要考虑设计一个什么样Registry的仓库环境,是部署测试环境,还是生产环境。 ##### 如果是用于生产环境发布的Registry,必须考虑几个因素: 镜像使用什么样的存储? 怎么样为用户推送和拉取动作进行授权? 是否能够监控仓库的运行状况,日志是否可以查看? 如何快速提取镜像?(注:这是至关重要的,如果依赖镜像进行构建测试环境、生产环境或自动化系统,这是取决仓库是否有生命力的最重要指标。) ## Registry搭建篇 ### 安装与配置 #### 1、Docker安装 ###### 卸载旧版本的docker。旧版本叫做docker或docker-engine,如果机器中安装的有旧版,那么首先请卸载他们。 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine; ###### 配置dockery源 安装依赖包 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2; 设置软件源 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo; 启用 edge 和 test 源 sudo yum-config-manager --enable docker-ce-edge sudo yum-config-manager --enable docker-ce-test ###### 安装docker-ce-edge版本 sudo yum install docker-ce ###### 启动docker systemctl start docker ###### 运行一个 hello-world镜像来验证是否安装成功 docker run hello-world >docker版本的选择 目前docker分为 CE(社区版)和EE(企业版),用户可以选择Stable(发布较慢)或者Edge(发布较快)版本。 我们选择CE版本中发行较快的Edge版本 #### 2、Registry安装 yum -y install docker-registry ### Registry原理 Docker模型的核心部分是有效的利用分层镜像机制,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。不同的Docker容器可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。由于最终镜像最终是以tar.gz的方式静态存储在服务器端,这种存储适用于对象存储而不是块存储。 ###### 一次docker pull 发生的交互 ![pull](/upload/article/images/pull_seq.png "pull") Client向Index请求,知道从哪里下载CentOS Index回复 CentOS在RegistryA CentOS的Checksum,所有层的Token Client向Registry A请求, CentOS的所有层。Registry A负责存储CentOS,以及它所依赖的层、 Regsitry A向Index发起请求,验证用户Token的合法性 Index返回这次请求是否合法 Client从Registry下载所有的层 Registry从后端存储中获取实际的文件数据,返给Client ### Registry配置 #### 1、启动Registry容器 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拉取镜像白话版: 我要搬货 没授权,去相关部门开单子(拿Token) 我要搬货,这是我的申请单(提交用户名和密码申请Token) 核实信息,单子盖章(拿到Token) 我要搬货,这是授权单 通过,搬走 05月19日发布 阅读原文 分享到: