关于registry
官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但有时我们需要拥有一个私有的镜像仓库用于管理我们自己的镜像。此时可以通过开源软件registry来达成目的。官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。
registry部署搭建
- 下载registry镜像,此处我们拉取的版本为当前最新的2.6.1
docker pull registry:2.6.1
- 根据下载的镜像创建并运行一个容器
docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --name registry registry:2.6.1
-p选项用于将宿主机的端口映射到容器的端口,这样就可以通过宿主机的地址访问容器服务
-v选项用于将宿主机的目录挂在到容器的目录,便于直接在宿主机上查看上传的镜像 - 访问
http://127.0.0.1:5000/v2
,出现以下结果则说明registry服务已启动成功
上传镜像到私有仓库
我的机器上有一个从官方下载的postgresql:9.6.2的镜像,现在将其发布到私有仓库中
- 通过docker tag将该镜像标志为要推送到私有仓库
docker tag 镜像名[:标签] 镜像仓库服务器地址/命名空间/镜像发布名:发布标签
, - 运行docker push将镜像push到我们的私有仓库中
docker push 镜像仓库服务器地址/命名空间/镜像发布名:发布标签
本例中,我们操作如下
docker tag postgresql:9.6.2 127.0.0.1:5000/firefly/postgresql:9.6.2
docker push 127.0.0.1:5000/firefly/postgresql:9.6.2
然后在/data/registry/docker/registry/v2/repositories下看到以命名空间名firefly命名的文件夹,上传的镜像即位于该目录下
删除已经push到本地仓库的镜像。。。
- 打开镜像的存储目录,如有-v操作打开挂载目录也可以,删除镜像文件夹
docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>
- 执行垃圾回收操作,注意2.4版本以上的registry才有此功能
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml