Docker Registry简介
Docker Registry是开源的软件,可以进行存储和分发Docker镜像。Docker Registry包括两个关键组成部分:Docker Trusted Registry和Docker Hub。简单理解,第一个是负责存储的,第二个是负责管理镜像的。
Docker Hub以前叫作Docker Index,Docker每次pull镜像时,都是先去Docker Index获取镜像信息,然后去保存镜像的Registry里面下载。
用过Docker的都知道,每次pull镜像时都很慢。后来国内出现了一些加速下载的,可是只是加速了镜像文件的下载。还是需要去连接官方的index服务,这一步很慢,而且还可能失败。
再往后,国内也提供index服务的加速了,但这样我们就需要完全信任他们了,因为我们完全不用连接官方的服务器了。如果我们不信任他们,或者我们有自己的私有镜像,不想发到公网去,我们就可以用Docker官方推荐的Docker Registry了。
安装使用Docker Registry
下载Docker Registry的镜像
官方提供了Docker Registry的镜像文件,我们只需执行docker pull registry
就可以了。今天(206.02.24)lastest标签的registry是版本0.9.1
,所以如果我们要用最新版本2.3
,可以拉取tag为2
,2.3
,2.3.0
的都可以。执行如下命令即可:
docker pull registry:2
启动Docker Registry
启动:
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下来
docker pull localhost/busybox
镜像文件存储本地
docker run -d -p 443:5000 --restart=always --name registry \
-v `pwd`/data:/var/lib/registry \
registry:2
使用https
上一篇文章介绍了如何获取证书,新建一个目录config,将证书chained.pem和密钥domain.key拷贝到目录config里面,然后执行:
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
改为你想要的名字就可以了。
添加权限认证
按照之前的步骤,任何人都可以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保存镜像文件
默认镜像文件存到本地磁盘,这个可扩展性不是很好,我们可以把镜像文件存到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
。
注: