Docker Registry是开源的软件,能够进行存储和分发Docker镜像。Docker Registry包括两个关键组成部分:Docker Trusted Registry和Docker Hub。简单理解,第一个是负责存储的,第二个是负责管理镜像的。html
Docker Hub之前叫做Docker Index,Docker每次pull镜像时,都是先去Docker Index获取镜像信息,而后去保存镜像的Registry里面下载。docker
用过Docker的都知道,每次pull镜像时都很慢。后来国内出现了一些加速下载的,但是只是加速了镜像文件的下载。仍是须要去链接官方的index服务,这一步很慢,并且还可能失败。服务器
再日后,国内也提供index服务的加速了,但这样咱们就须要彻底信任他们了,由于咱们彻底不用链接官方的服务器了。若是咱们不信任他们,或者咱们有本身的私有镜像,不想发到公网去,咱们就能够用Docker官方推荐的Docker Registry了。dom
官方提供了Docker Registry的镜像文件,咱们只需执行docker pull registry
就能够了。今天(206.02.24)lastest标签的registry是版本0.9.1
,因此若是咱们要用最新版本2.3
,能够拉取tag为2
,2.3
,2.3.0
的均可以。执行以下命令便可:ide
docker pull registry:2
启动:ui
docker run -d -p 443:5000 --restart=always --name registry registry:2
下载镜像,并把它上传到本身的registry:阿里云
docker pull busybox && docker tag busybox localhost/busybox docker push localhost/busybox
这样localhost/busybox就在本身的registry中了,下次能够直接pull下来rest
docker pull localhost/busybox
docker run -d -p 443:5000 --restart=always --name registry \ -v `pwd`/data:/var/lib/registry \ registry:2
上一篇文章介绍了如何获取证书,新建一个目录config,将证书chained.pem和密钥domain.key拷贝到目录config里面,而后执行:code
docker run -d -p 443:5000 --restart=always --name registry \ -v `pwd`/config:/config \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/config/chained.pem \ -e REGISTRY_HTTP_TLS_KEY=/config/domain.key \ registry:2
下次对镜像进行操做时,能够把localhost改成这个证书对应的域名了。证书有的是crt结尾了,不要紧,把chained.pem
改成你想要的名字就能够了。htm
按照以前的步骤,任何人均可以push和pull这个仓库中的镜像。若是443端口暴露在外网中,最好加个权限认证。testuser
和testpassword
分别为用户名和密码,能够修改成你想要的,而后执行:
htpasswd -Bbn testuser testpassword > config/htpasswd
若是本地没有安装htpasswd,也能够在启动了registry后执行以下命令:
docker exec registry htpasswd -Bbn testuser testpassword > config/htpasswd
而后再执行启动命令:
docker run -d -p 443:5000 --restart=always --name registry \ -v `pwd`/config:/config \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/config/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/config/chained.pem \ -e REGISTRY_HTTP_TLS_KEY=/config/domain.key \ registry:2
这样,访问registry就须要先login,docker login myregistrydomain.com
,按提示输入用户名和密码便可。
默认镜像文件存到本地磁盘,这个可扩展性不是很好,咱们能够把镜像文件存到OSS中。这个使用起来也很简单,由于官方registry中已经包含了OSS的驱动了。只需修改启动命令便可:
docker run -d -p 443:5000 --restart=always --name registry \ -v `pwd`/config:/config \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/config/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/config/chained.pem \ -e REGISTRY_HTTP_TLS_KEY=/config/domain.key \ -e REGISTRY_STORAGE=oss \ -e REGISTRY_STORAGE_OSS_ACCESSKEYID=********** \ -e REGISTRY_STORAGE_OSS_ACCESSKEYSECRET=***************** \ -e REGISTRY_STORAGE_OSS_REGION=oss-cn-qingdao \ -e REGISTRY_STORAGE_OSS_BUCKET=******* \ registry:2
将上面命令中的***
替换成本身的,REGISTRY_STORAGE_OSS_REGION
的值也要替换成本身oss所在的地区,若是是青岛就是oss-cn-qingdao
。
注: