前言:
首先,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
2.Registry安装
由于Docker和Registry更新比较快,所以我们在此宿主机中进行安装的时候,选择Registry2.1版本进行安装。
yum -y install docker-registry
至此,Docker和registry的安装已经完成,下面开始进行配置和测试。
注:安装完成后需要对Docker和Registry进行enable and start。
Registry原理
Docker模型的核心部分是有效的利用分层镜像机制,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。不同的Docker容器可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。由于最终镜像最终是以tar.gz的方式静态存储在服务器端,这种存储适用于对象存储而不是块存储。
一次docker 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容器
sudo docker run –d –p 80:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry:2
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。运行docker ps看一下容器情况:
说明我们已经启动了Registry服务,打开浏览器输入http://127.0.0.1:80/v2,出现下面情况说明Registry运行正常。
2.客户机访问Registry
对于需要访问Registry仓库的客户机来说,首先需要修改/etc/sysconfig/docker的配置文件:添加 --insecure-registry 192.168.0.70:80
3.客户端向Registry存放镜像
首先,需要docker tag给需要上传的镜像文件打标。然后再从本地上传镜像到仓库。
4.客户端向仓库Pull镜像
在另外一台主机上使用pull从192.168.0.70的仓库中把镜像给Pull下来
通过以上操作就可以看到我们已经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
到这里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。进行构建安装。(此处省略掉)
由于Portus在安装过程中,需要下载几个依赖的镜像包,例如: Portus安装依赖MariaDB,portus_web.tar、rails4.2.2tar,Registry2.1.1.tar安装过程中下载比较慢。我们先下载了再进行安装过程。
由于我先把这几个已经下载完成,所以首先拷贝到宿主机的目录中了,需要直接解压。
3. 安装Portus程序
安装之前需要把拷贝到宿主机中的几个依赖镜像给load到Images中。
关于Registry的存储路径修改,请在安装前先到compose中修改docker-compose.yml.template文件。这里面包含web端口和挂载volumes等参数。然后,再执行安装脚本 ./compose-setup.sh -e 192.168.0.70。(由于本实例重新安装了Registry,所以,此处宿主机和容器的端口都是5000。)
然后到Portus源代码文件中执行./compose-setup.sh。
到此,Portus的安装已经完成.。
4. 修改Docker配置文件
此时,我们还需要修改vi /lib/systemd/system/docker.service 把--insecure-registry 192.168.0.70:5000这句加到ExecStart=/usr/bin/docker这个配置项后。
重启Docker
systemctl daemon-reload systemctl restart docker
重启portus容器
docker start portus_db_1 portus_web_1 portus_crono_1 portus_registry_1
可以在浏览器中打开登录窗口。
在客户机中需要修改 /etc/sysconfig/docker下的文件。
Portus配置与验证
1.登录配置程序
Portus的登录界面需要创建用户名和密码。然后进行Registry的设置。
创建test01和test02帐户,并Enabled帐户,然后进行登录测试。
2.上传镜像测试
3.下载镜像测试
总结
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/
原文:http://dockone.io/article/1151