基于docker registry的私服安装简介

基于docker registry的私服安装简介

1. Docker 私服简介

官方提供了Docker Hub网站来作为一个公开的集中仓库。然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。    

docker registry 就是管理 docker 镜像的服务, Docker 公司维护的 registry 就是 http://hub.docker.com ,它可以让我们方便的下载预先做好的镜像。

$ docker pull ubuntu 

上面的命令就是缺省的从这个Docker官方源下载。在国内为了加快访问,你也可以使用 docker.cn 的服务,他们同步了常用的镜像,使用也非常方便,如:

$ docker pull docker.cn/docker/ubuntu 

大部分公司在推广使用 docker 时,都会为了使用方便,在公司内部自己架设一个,不仅仅是为了安全、节省大量的带宽,而且也可以有效推动内部对docker的有效利用,如下图:

Docker公司的 docker registry也是开源的,我们可以很容易的架设自己的私有docker registry

docker-registry既然也是软件应用,自然最简单的方法就是使用官方提供的已经部署好的镜像registry。官方文档中也给出了建议,直接运行sudo docker run -p 5000:5000 registry命令。这样确实能启动一个registry服务器,但是所有上传的镜像其实都是由docker容器管理,放在了/var/lib/docker/….某个目录下。而且一旦删除容器,镜像也会被删除。因此,我们需要想办法告诉docker容器镜像应该存放在哪里。registry镜像中启动后镜像默认位置是/tmp/registry,因此直接映射这个位置即可,比如到本机的/opt/data/registry目录下。

因为docker技术正处于发展和完善阶段,所以有些文章要么内容已经过时,要么给出了错误的配置,导致无法正常创建仓库。本文记录的是个人完整的搭建过程,docker version为 1.12.0

2. 实验环境

1. Docker环境如下图:

Docker版本 1.12.0

2. 操作系统版本

[root@dev ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

3. Linux采用vmware虚拟机安装centos

3. 服务器安装过程

1. 下载虚拟机 http://pan.baidu.com/s/1i4Mp07z 下载密码:jpvy

2. 解压缩虚拟机, 启动这个虚拟机

3. 在虚拟机的控制台里面检验虚拟机的ip地址 ifconfig检查ip地址

如上图, ip地址为 192.168.128.189

4. 配置xshell系统, 连接虚拟机里面的centos

如上图通过xshell连接虚拟机里面的centos系统

5. 修改主机的主机名称

在私服中访问需要采用主机名称进行, 也可以采用ip进行, 但是由于采用证书若是绑定到ip地址, 当ip地址变化时会造成麻烦, 因此采用特定的hostname进行, 就方便了以后更换ip。

hostnamectl --static set-hostname xb.registry

如下图:

6. 修改主机名称

vi /etc/hosts

在文件末尾添加: 192.168.128.189 xb.registry

保存退出后, 进行相关测试

ping xb.registry

7. httppasswd安装工具

yum install httpd-tools -y

稍后会采用下面的命令进行http用户的密码生成工作

8. 下载registry镜像

登录 https://hub.docker.com/_/ registry /页面, 通过页面获取下载命令

docker pull registry 进行下载

9. 下载containersol/docker-registry-proxy镜像

打开https://hub.docker.com/r/containersol/docker-registry-proxy/ 页面, 获取下载命令

docker pull containersol/docker-registry-proxy

如下图:

10. 检查镜像, 准备安装

11. 启动registry镜像

检查镜像的数据安装目录

通过docker inspect镜像信息检查

创建数据目录:

mkdir -p /export/lib/registry/data

mkdir -p /export/lib/registry/conf

创建 数据目录和配置目录

启动容器

docker run -d -p 5000:5000 -v /export/lib/registry/data:/var/lib/registry --name docker-registry registry

启动后查看启动日志, 如上图

12. 生成签名证书

使用如下命令生成 证书

openssl req -x509 -nodes -newkey rsa:2048 -keyout /export/lib/registry/conf/docker-registry.key -out /export/lib/registry/conf/docker-registry.crt

上面是一行命令, 没有换行, 文档的关系他换行了, 使用时把上面命令放到一行中。

13. 创建能够访问仓库的用户名和密码

htpasswd -c /export/lib/registry/conf/docker-registry.htpasswd regadmin

输入完命令后, 输入相关密码并记录下来。

第一个用户需要加-c参数,随后输入密码并确认。添加新用户不需要加-c参数。 例如:创建第二个用

htpasswd /export/lib/registry/conf/docker-registry.htpasswd testuser

14. 运行Nginx

使用下面命令执行:

docker run -d -p 443:443 -e REGISTRY_HOST="docker-registry" -e REGISTRY_PORT="5000" -e SERVER_NAME="localhost" --link docker-registry:docker-registry -v /export/lib/registry/conf/docker-registry.htpasswd:/etc/nginx/.htpasswd:ro -v /export/lib/registry/conf:/etc/nginx/ssl:ro --name docker-registry-proxy containersol/docker-registry-proxy

上面命令, 是一行命令, 由于文档原因换行, 执行时保持一行

这里使用了一个镜像去创建nginx容器,如果我们利用独立的nginx去进行配置的话,要求nginx版本在1.7.5以

上才能支持nginx.conf中add_header等配置。如果是作为内网使用,建议采用nginx容器这种方式就行。如果允

许让外网访问,建议先拷贝docker-registry-proxy容器中nginx.conf配置的内容,然后根据实际情况调整upstream中

相关ip,docker-registry.key,docker-registry.htpasswd等文件存放的位置。

注意这块nginx.conf配置的server非常重要,需要配置为之前提到的域名或别名。

15. 监视日志

16. 下载证书

sz docker-registry.crt

下载到本地后如下图:

服务器安装完成, 下面准备配置客户端进行测试

4. 客户端配置及使用

1. 重新从下载的 centos虚拟机中, 解压一个 虚拟机

2. 启动新的虚拟机, 并查看ip地址

在控制台中查看到是 192.168.128.146

3. 配置xshell登录这个虚拟机, 然后编辑 hosts文件

vi /etc/hosts 文件

在文件中 添加 192.168.128.189 xb.registry, 然后保存退出

4. 测试 是否能访问 xb.registry主机

5. 进入docker的目录, 创建证书等目录

进入 cd /etc/docker 然后创建目录

mkdir -p certs.d

然后进入 certs.d

然后创建目录 mkdir -p xb.registry:443

6. 上传证书文件

上传完成后如下图

7. 登录私服, 一定要先登录私服, 否则会不正常的

如上图, 登录成功

8. 上传本地的镜像到 私服

上传本地的 镜像到私服前, 必须对本地的镜像要打标签, 然后才能传, 否则会报找不到 镜像的错误

例如,本地有nexus镜像, 我们以这个为例子做测试实验

docker tag sonatype/nexus xb.registry:443/sonatype/nexus:xb

然后检验:

最后上传 打好标签的 镜像 docker push xb.registry:443/sonatype/nexus:xb

9. 下载镜像

docker pull xb.registry:443/sonatype/nexus:xb

10. 检查服务器上的数据目录

相关资源如下:

链接:http://pan.baidu.com/s/1kV8o6m7 密码:5qfi 安装过程记录

http://xialingsc.github.io/home//docker/how-to-build-a-secure-private-docker-registry2.0-with-nginx/