戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

Docker实战(六)搭建自己的Docker Registry

日期:2016年05月04日 作者: 分类:运维 阅读:3,247

Docker Registry 是一个用来管理Docker镜像的服务,本身也是一个Docker容器。大部分情况下都可以使用Docker Hub,私有的Docker Registry使用场景主要在当需要对容器镜像存储进行完全控制或需要把镜像管理进行集成的情况。

一、Docker Registry 部署

由于 Docker Registry 已经被制作成一个Docker镜像,所以安装部署非常简单,只需要按照我们通常的docker run就可以,如果本地没有 registry 的镜像,则会自动从 Docker Hub 上获取。

需要注意的是 Registry 默认的对外服务端口是 5000,如果我们宿主机上运行的 Registry 需要对外提供服务,可以通过映射端口的方式提供。

本节实验中我们使用 registry:2 镜像,这个镜像为2.0版本的Registry。

部署 Docker Registry的命令:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

停止和删除 Registry 只需要用容器管理中学到的 docker stopdocker rm命令。

二、使用 Registry 管理仓库和镜像

推送镜像

运行后我们进行简单的测试,可以先将本地的一个redis镜像推送到 Registry 上:

搭建自己的Docker Registry

首先使用docker tagdockertest镜像进行操作,会发现docker images列表中多了一个localhost:5000/dockertest:0.2 的镜像。

搭建自己的Docker Registry

上述命令将localhost:5000/dockertest:0.2 镜像推送到localhost:5000的Docker Registry上。

注意 Docker 镜像的命名规则 localhost:5000/dockertest:0.2 中,localhost:5000 表示 Registry 的地址和端口。

镜像获取

如果我们需要从localhost:5000的Registry上下载镜像,只需要简单的docker pull 命令就可以完成。

首先删除本地的localhost:5000/dockertest:0.2 的镜像,然后再从Registry上下载镜像:

搭建自己的Docker Registry

由于 localhost:5000/dockertest:0.2 和 dockertest:0.2 指向的是同一个镜像,所以删除前者只是进行Untagged操作,删除的实际只是一个TAG。

搭建自己的Docker Registry

docker pull命令执行的过程中发现所有的数据层都已经存在本地。再次检查docker images就会看到新的localhost:5000/redis:latest镜像。

三、Docker Registry的配置

1)镜像存储

如果我们希望将Registry里的镜像都存储在一个数据卷中,这样做的好处是我们可以在宿主机上对该数据卷进行备份和监控。请回忆我们的数据卷参数-v,此外,Registry中存储镜像的目录是/var/lib/registry

为了避免端口及命名冲突,将先前实验创建的 Registry 删除,创建一个 新的Registry,使用宿主机上的/root/data目录作为存储镜像的数据卷,然后将本地的dockertest镜像推送到 Registry,然后查看/root/data 目录的变化:

搭建自己的Docker Registry

会看到/root/data 目录多了一个 docker 文件夹。进入文件夹可以看到刚刚上传的镜像。

2)认证机制

Registry 支持多种认证方式,这里仅仅介绍基本的认证方式,如果我们为Registry配置一个域名对外提供服务,需要首先配置TLS。本节课程中,我们暂时不适用域名的方式。

首先我们需要创建一个保存用户名和密码的认证文件夹,并使用htpasswd创建一个认证信息:

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn username password > auth/htpasswd

认证信息中,用户名为username,密码是password。

启动 Registry,使用该认证信息,需要将/root/auth挂载到 Registry 的/auth 目录:

docker run -d -p 5000:5000 --restart=always --name registry -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2

搭建自己的Docker Registry

为了可以通过认证向Registry 推送本地的镜像,我们需要首先使用docker login配置认证信息:

搭建自己的Docker Registry

注意:Linux上的密码输入默认不显示,不是系统卡住了。

认证通过后,我们就可以愉快的push镜像了:

搭建自己的Docker Registry

其他认证方式的配置参数,可以参考文档Registry 认证配置

 

PS:本Docker实战教程系列中使用的操作系统是基于Debian的LMDE2,教程中的命令均已运行测试,如有雷同,我抄你的!!!

标签:

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/1187.html

10条评论

      • 博主 加油 我就是欣赏你这种人 !←_←想问一下博主 registry的仓库存储目录有配置文件可以修改吗?因为centos下他存放的目录又长又臭啊。。/var/lib/docker/volumes/99f909957227b327141dcaaea6418e03ff73599759f7761f951a91b073ce3533/_data/docker/registry/v2/repositories

        • 谢谢支持!应该这样说,它的存储目录默认是 /var/lib/docker ,它里面的各种目录以及命名规则是根据docker的规则组织的,有点类似Git这类的版本管理系统,基本可以类比为数据库的数据文件,我们在使用时不会也最好不要直接去操作这些目录的,所以也不用在意它这种“又臭又长”的目录,它这么命名也是为避免镜像存储时冲突的问题。我也是研究Docker没多长时间,有说错误的地方欢迎指正!

          • 问的时候没百度 懒了,百度一下就有答案了 run的时候有参数可以设置docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /alidata/registry:/tmp/registry -p 5000:5000 registry 兄弟您QQ多少 互相学习

            • 创建容器时可以直接 -v /alidata/registry:/var/lib/registry ,这样镜像存储目录就在你的宿主机的 /alidata/registry 目录了,而不用设置 STORAGE_PATH=/tmp/registry 了。我的联系方式都写在“关于戊辰人”里面了。
              补充:/var/lib/docker 目录是我们使用 docker pull 时从docker hub下载镜像的存储目录,在宿主机上;而 /var/lib/registry 则是创建registry容器时容器里面的目录,宿主机上没有该目录。

发表评论

电子邮件地址不会被公开。 必填项已用*标注