基于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/