Docker实战(六)搭建自己的Docker Registry
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 stop
和 docker rm
命令。
二、使用 Registry 管理仓库和镜像
推送镜像
运行后我们进行简单的测试,可以先将本地的一个redis镜像推送到 Registry 上:
首先使用docker tag
对dockertest
镜像进行操作,会发现docker images
列表中多了一个localhost:5000/dockertest:0.2
的镜像。
上述命令将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上下载镜像:
由于 localhost:5000/dockertest:0.2
和 dockertest:0.2
指向的是同一个镜像,所以删除前者只是进行Untagged
操作,删除的实际只是一个TAG。
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
目录的变化:
会看到/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
为了可以通过认证向Registry 推送本地的镜像,我们需要首先使用docker login
配置认证信息:
注意:Linux上的密码输入默认不显示,不是系统卡住了。
认证通过后,我们就可以愉快的push镜像了:
其他认证方式的配置参数,可以参考文档Registry 认证配置
PS:本Docker实战教程系列中使用的操作系统是基于Debian的LMDE2,教程中的命令均已运行测试,如有雷同,我抄你的!!!
除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址
给博主分享知识的博大胸怀点赞 ,。。怎么没有点赞功能?
其实主要还是因为访问人数少就没做这些功能,权当作一个在线笔记了哈!
博主 加油 我就是欣赏你这种人 !←_←想问一下博主 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容器时容器里面的目录,宿主机上没有该目录。
怎么没有打赏功能?
你要打赏么?我有卡号!!!
卡号什么的,太low啦!
关键是,节操啊!!!