镜像从仓库下载下来,镜像保存在仓库中,而仓库存在于Registry中。默认的Registry是由docker公司运营的公共Registry服务,即Docker Hub,Docker Registry的代码是开源的,也可以运行自己的私有Registry。
当我们需要镜像时,我们只需连上internet,然后运行pull命令即可,但是docker服务器是在国外的,拉取速度肯定是非常慢的,因此,我们国内有专门做镜像加速器的公司,比如阿里巴巴。我们可以在阿里巴巴的平台上配置镜像加速器。
1.注册阿里云帐号,www.aliyun.com,然后进入控制台
选择容器镜像服务,然后在镜像服务中选择镜像加速器
我的系统环境是rhel7.3,因此我选择的操作文档是Centos
这样,就完成了docker的镜像加速
接下来,我们可以搭建一个私有的仓库
1.下载Registry镜像
docker pull registry:2
运行Registry容器
docker run -d -p 5000:5000 registry:2
测试Registry
我们需要先给一个镜像打个标签,然后用push命令推送到新的Registry
docker tag 镜像ID/镜像名:标签 主机名:端口号/镜像名
docker push 主机名:端口号/镜像名
一次docker pull或push背后发生的事情:
以pull为例
index服务主要提供镜像索引以及用户认证的功能。当下载一个镜像的时候,首先会去index服务上做认证,然后查找镜像所在Registry的地址并发给客户端,然后客户端会用这个认证去找registry下载镜像,registry则会去问index客户端是否被认证,随后index给registry发送客户端已经被认证,然后客户端成功下载镜像。
在搭建私有仓库时重点介绍一下安全问题,建议使用自签名证书。这样,其他主机也就可以很容易的在私有仓库中pull和push
将westos.org加入到解析中
指示它使用TLS证书。这个命令bind将certs/目录装载到/certs/处的容器中,并设置环境变量,告诉容器在哪里可以找到domain.crt和domain.key文件。注册表在端口443(默认的HTTPS端口)上运行。
配合-v参数创建目录
私有的registry已经加密,接下来再开一台虚拟机测试一下,注意:此虚拟机也要进行解析
测试:
在registry所在容器的服务器上push一个tag之后的镜像,然后在虚拟机上pull这个镜像,看是否成功,操作如下:
push:
pull:
出现这样的问题是因为该虚拟机并没有拿到认证,因此,我们需要把私有registry的认证交给该虚拟机
拿到认证后再次pull(注意加标签,如果不加标签,默认是latest)
如上例所示,我们可以直接对registry进行push,但是如果使用本机的人并不是我们自身,那么这就意味着不安全,因此,我们可以做本机身份验证。
注意:不能对以明文形式发送凭据的身份验证方案使用身份验证。必须先配置TLS才能使身份验证工作。上例中我们已经完成了TLS
1.官方文档:
2.使用基本身份验证启动registry
注意:必须先删除之前命名的registry,或者重新命名接下来这个要启动的容器
验证:
首先,我们给ubuntu镜像打个标签
然后,我们上传这个镜像
由上图可以看出,并没有上传成功,没有基本身份验证凭据
接下来,我们验证一下,这里的密码就是刚才你所设置的密码,身份验证成功后可以发现,push成功。
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
注意:上例代码中的第四行可以通过如下图的方式查看。
可以对仓库中的镜像进行查看
但是不能对镜像进行删除,如果要对镜像进行删除,还得把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
然后在浏览器查看,你会发现,多了删除选项