1

Docker Registry简介

Docker Registry是开源的软件,可以进行存储和分发Docker镜像。Docker Registry包括两个关键组成部分:Docker Trusted RegistryDocker 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端口暴露在外网中,最好加个权限认证。testusertestpassword分别为用户名和密码,可以修改为你想要的,然后执行:

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

注:

  • region查询网址

  • 阿里云OSS的其他参数查询网址


lhcpig
547 声望9 粉丝

Java工程师