【Docker实战】Registry & Portus搭建详解

原文链接

【编者的话】本文根据云舒网络博客整理发布。文章详细介绍了Docker Registry以及带UI管理的仓库管理软件 Portus搭建过程。

前言:

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

Registry搭建篇

Docker & Registry环境准备

在谈到Registry的部署之前,我们首先要考虑设计一个什么样Registry的仓库环境,是部署测试环境,还是生产环境。如果是用于生产环境发布Registry,必须考虑如下因素:
a. 应在何处存储镜像?
b. 用户的权限是否受控?
c. 当发生问题,如何解决?日志是否可以查看?
d. 如何快速提取镜像?(注:这是至关重要的,如果依赖镜像进行构建测试环境、生产环境或自动化系统,这是取决仓库是否有生命力的最重要指标。)

本实例把存储镜像的路径放置到宿主机的文件路径下。例如:/opt/myregistry目录中。这样即使宿主机中Docker Registry 出现问题,我们再重创建一个,把此路径添加到新Registry Server中,那么之前上传的镜像文件仍然存在,这就更方便大家使用。下面是安装之前进行的一些准备工作:

1.Docker安装

首先,选择一个合适的PC机做宿主机,其配置参数如下:
CPU: Intel E8400 Duo CPU 3.0GHz RAM: 2G disk:300G
CPU查看命令: more /proc/cpuinfo |grep "model name"
Mem查看命令: grep MemTotal /proc/meminfo

1.png



2.Registry安装 

由于Docker和Registry更新比较快,所以我们在此宿主机中进行安装的时候,选择Registry2.1版本进行安装。

yum -y install docker-registry

2.png



3.png



至此,Docker和registry的安装已经完成,下面开始进行配置和测试。

5.png



注:安装完成后需要对Docker和Registry进行enable and start。

Registry原理

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

一次docker pull 发生的交互


6.png

 

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


Registry配置

1.启动Registry容器

sudo docker run –d –p 80:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry:2

8.jpg



Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。运行docker ps看一下容器情况:

7.png



说明我们已经启动了Registry服务,打开浏览器输入http://127.0.0.1:80/v2,出现下面情况说明Registry运行正常。

9.0_.png



2.客户机访问Registry

对于需要访问Registry仓库的客户机来说,首先需要修改/etc/sysconfig/docker的配置文件:添加 --insecure-registry 192.168.0.70:80

9.1_.jpg



3.客户端向Registry存放镜像

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

9.1_.jpg



4.客户端向仓库Pull镜像

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

9.3_.png



9.4_.jpg



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

Portus搭建篇

注:请勿将本篇作为上篇Registry安装内容延续,以下内容为全新环境下的Portus搭建。

Portus安装

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

1.)安全:Portus 实现了最新的Docker Registry中定义的新的授权方案。它允许对你所有的镜像进行细颗粒度控制,你可以决定哪个用户和团队可 push/pull 镜像。

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

3.)搜索: Portus 提供你的私人注册表的内容的预览,同时有一个快速搜索镜像的功能。 

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

1.安装Docker-Compose

首先,yum添加源 

[ root@bogon]# yum -y install epel-release

安装python-pip 

[root@ bogon]# yum -y install python-pip

安装docker-compose 

pip install -U docker-compose

10.jpg



到这里docker-compse就完成了。

2.从Git到Portus的代码搭建

正常安装方法: 需要到Git Clone https://github.com/SUSE/Portus.git上获取Portus的源码。下载包Portus_git.tar.gz,解压此源码包,并修改Gemfile.lnk 的第一行:“https://rubygems.org”修改为“http://rubygems.org”。运行compose-setup.sh -e server IP。进行构建安装。(此处省略掉)

11.png



由于Portus在安装过程中,需要下载几个依赖的镜像包,例如: Portus安装依赖MariaDB,portus_web.tar、rails4.2.2tar,Registry2.1.1.tar安装过程中下载比较慢。我们先下载了再进行安装过程。

12.png



由于我先把这几个已经下载完成,所以首先拷贝到宿主机的目录中了,需要直接解压。

13.jpg



3. 安装Portus程序

安装之前需要把拷贝到宿主机中的几个依赖镜像给load到Images中。

14.jpg



关于Registry的存储路径修改,请在安装前先到compose中修改docker-compose.yml.template文件。这里面包含web端口和挂载volumes等参数。然后,再执行安装脚本 ./compose-setup.sh -e 192.168.0.70。(由于本实例重新安装了Registry,所以,此处宿主机和容器的端口都是5000。)

15.png



然后到Portus源代码文件中执行./compose-setup.sh。

16.jpg



到此,Portus的安装已经完成.。

4. 修改Docker配置文件

此时,我们还需要修改vi /lib/systemd/system/docker.service 把--insecure-registry 192.168.0.70:5000这句加到ExecStart=/usr/bin/docker这个配置项后。

17.png



重启Docker

systemctl daemon-reload systemctl restart docker

重启portus容器
docker start portus_db_1 portus_web_1 portus_crono_1 portus_registry_1

可以在浏览器中打开登录窗口。

18.png



在客户机中需要修改 /etc/sysconfig/docker下的文件。

17.png



Portus配置与验证 

1.登录配置程序

Portus的登录界面需要创建用户名和密码。然后进行Registry的设置。

20.png



21.png



22.png



创建test01和test02帐户,并Enabled帐户,然后进行登录测试。

2.上传镜像测试

23.jpg



24.png



25.png



3.下载镜像测试

26.jpg



总结

Docker Registry的创建私有仓库的方法有很多种。像京东的Docker镜像存储系统--Speedy,Registry+Nginx &SSL等后续将进一步探究, 实现开发、测试以及生产的一体化流程,敬请期待!

本文电子书下载:

网页下载:
http://www.cloudsoar.com/down/ddoc/v1.1/

百度云盘下载:
[http://pan.baidu.com/s/1jHfP9Dc](http:// http://pan.baidu.com/s/1jHfP9Dc)

博客期刊:
http://www.cloudsoar.com/about ... v1.1/

_________________________________________________________________________________________________________

温馨提示:

云舒网络携手Rancher Labs推出【Rancher | 实战微信群】,在线为您分享Docker技术干货,更有往期回顾精选期刊等你拿!

本群汇集了Rancher中国最强技术精英团队及业内技术派高人,宗旨是为了大家拥有更专业的平台交流Rancher实战技术,实时与Rancher创始团队面对面!同时欢迎各位分享自己的经验、疑难问题,我们将定期邀请分享嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。

对Rancher和Docker技术感兴趣、或对本文中细节需继续探讨的朋友,欢迎加入本群参与讨论! 

加微信群方法:

1.关注【云舒网络】公众号

2.留言”我要加群” 

QQ群号:216521218

posted @ 2016-05-16 09:44  离线中  阅读(7451)  评论(0编辑  收藏  举报