docker-搭建私有仓库

镜像从仓库下载下来,镜像保存在仓库中,而仓库存在于Registry中。默认的Registry是由docker公司运营的公共Registry服务,即Docker Hub,Docker Registry的代码是开源的,也可以运行自己的私有Registry。

当我们需要镜像时,我们只需连上internet,然后运行pull命令即可,但是docker服务器是在国外的,拉取速度肯定是非常慢的,因此,我们国内有专门做镜像加速器的公司,比如阿里巴巴。我们可以在阿里巴巴的平台上配置镜像加速器。

1.注册阿里云帐号,www.aliyun.com,然后进入控制台

docker-搭建私有仓库

选择容器镜像服务,然后在镜像服务中选择镜像加速器

 

docker-搭建私有仓库

我的系统环境是rhel7.3,因此我选择的操作文档是Centos

docker-搭建私有仓库

这样,就完成了docker的镜像加速

接下来,我们可以搭建一个私有的仓库

1.下载Registry镜像

docker pull registry:2

docker-搭建私有仓库

运行Registry容器

docker run -d -p 5000:5000 registry:2

docker-搭建私有仓库

测试Registry

我们需要先给一个镜像打个标签,然后用push命令推送到新的Registry

docker  tag  镜像ID/镜像名:标签  主机名:端口号/镜像名

docker   push   主机名:端口号/镜像名

docker-搭建私有仓库

一次docker pull或push背后发生的事情:

docker-搭建私有仓库

以pull为例

index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在Registry的地址并发给客户端,然后客户端会用这个认证去找registry下载镜像,registry则会去问index客户端是否被认证,随后index给registry发送客户端已经被认证,然后客户端成功下载镜像。

在搭建私有仓库时重点介绍一下安全问题,建议使用自签名证书。这样,其他主机也就可以很容易的在私有仓库中pull和push

docker-搭建私有仓库

将westos.org加入到解析中

docker-搭建私有仓库

指示它使用TLS证书。这个命令bind将certs/目录装载到/certs/处的容器中,并设置环境变量,告诉容器在哪里可以找到domain.crt和domain.key文件。注册表在端口443(默认的HTTPS端口)上运行。

docker-搭建私有仓库

配合-v参数创建目录

docker-搭建私有仓库

私有的registry已经加密,接下来再开一台虚拟机测试一***意:此虚拟机也要进行解析

docker-搭建私有仓库

测试:

在registry所在容器的服务器上push一个tag之后的镜像,然后在虚拟机上pull这个镜像,看是否成功,操作如下:

push:

docker-搭建私有仓库

pull:

docker-搭建私有仓库

出现这样的问题是因为该虚拟机并没有拿到认证,因此,我们需要把私有registry的认证交给该虚拟机

docker-搭建私有仓库docker-搭建私有仓库docker-搭建私有仓库

拿到认证后再次pull(注意加标签,如果不加标签,默认是latest)

docker-搭建私有仓库

docker-搭建私有仓库

本机基本身份验证

如上例所示,我们可以直接对registry进行push,但是如果使用本机的人并不是我们自身,那么这就意味着不安全,因此,我们可以做本机身份验证。

注意:不能对以明文形式发送凭据的身份验证方案使用身份验证。必须先配置TLS才能使身份验证工作。上例中我们已经完成了TLS

1.官方文档:

docker-搭建私有仓库

docker-搭建私有仓库

2.使用基本身份验证启动registry

注意:必须先删除之前命名的registry,或者重新命名接下来这个要启动的容器

docker-搭建私有仓库

验证:

首先,我们给ubuntu镜像打个标签

docker-搭建私有仓库

然后,我们上传这个镜像

docker-搭建私有仓库

由上图可以看出,并没有上传成功,没有基本身份验证凭据

接下来,我们验证一下,这里的密码就是刚才你所设置的密码,身份验证成功后可以发现,push成功。

docker-搭建私有仓库

web UI界面管理私有仓库

参考文档:https://github.com/mkuchin/docker-registry-web

1.将docker-registry-web下载下来,参考命令

docker pull hyper/docker-registry-web

2.使用基本身份验证和自签名证书连接到Docker registry

参考命令:

docker run -it -p 8080:8080 --name registry-web --link registry-srv \
           -e REGISTRY_URL=https://registry-srv:5000/v2 \
           -e REGISTRY_TRUST_ANY_SSL=true \
           -e REGISTRY_BASIC_AUTH="YWRtaW46Y2hhbmdlbWU=" \
           -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web

注意:上例代码中的第四行可以通过如下图的方式查看。

docker-搭建私有仓库

docker-搭建私有仓库

可以对仓库中的镜像进行查看

docker-搭建私有仓库

但是不能对镜像进行删除,如果要对镜像进行删除,还得把readonly改为false,运行代码如下

docker run -it -p 8080:8080 --name registry-web --link registry:westos.org -e REGISTRY_URL=https://westos.org/v2 -e REGISTRY_TRUST_ANY_SSL=true -e REGISTRY_BASIC_AUTH="bGltaW5nOnJlZGhhdA==" -e REGISTRY_NAME=westos.org  -e REGISTRY_READONLY=false docker-registry-web

docker-搭建私有仓库

然后在浏览器查看,你会发现,多了删除选项

docker-搭建私有仓库