Docker本地镜像管理之Docker Registry
一个系统可能包含着很多个微服务即有很多个镜像,当镜像越来越多的时候,就必须得有一个地方来管理这些镜像,Docker官方提供了Docker Hub来维护管理所有的镜像,只是对于免费用户而言,只能创建一个私有仓库,付费用户才拥有更多私有仓库的权限,对此官方开源了Docker Registry的源代码,我们可以通过它在局域网内部搭建私有的镜像注册中心。另外国内的阿里云也支持镜像管理。相当于本地有个私有的Docker hub。
开始搭建本地注册中心
1、下载镜像Docker Registry
docker pull registry
2、创建本地私有容器库
# 创建一个名为registry的容器,将宿主机5000端口映射到容器的5000端口,将宿主机的/myregistry目录映射到容器/tmp/registry目录作为数据容器卷
docker run -id -p 5000:5000 -v /myregistry/:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便与宿主机联调。
docker挂载主机目录访问如果出现cannot open directory:Permission defined,解决办法:在挂载目录后多加一个--privileged=true即可。
如果是centos7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为。
在SELinux里挂载目录被禁止掉了,如果要开启,我们一般会用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使使用该参数,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限。
端口5000->5000,左边是主机端口,右边是docker 容器实例端口。
3、验证私服库上的镜像
浏览器访问:http://192.168.63.173:5000/v2/,查看本地镜像列表
或者命令执行
[root@localhost ~]# curl -XGET http://192.168.63.173:5000/v2/_catalog {"repositories":[]}
发现本地没有任何镜像。
开始案例测试
运行一个doker实例,然后编译安装好指定的环境配置或者新升级的环境镜像
4、将新镜像myubuntu:1.0修改为符合私服规范的tag
docker tag myubuntu:1.0 192.168.63.173:5000/myubuntu:1.0 //相当于clone出一份镜像,看下图
由于docker私服库默认不支持http形式推送,所以需要做配置,取消默认配置,修改完后如果不生效,建议重启docker
vi /etc/docker/daemon.json
{ "insecure-registries":["192.168.63.173:5000"] }
重新启动docker服务以及本地私服库
systemctl restart docker
systemctl status docker
docker run -id -p 5000:5000 -v /myregistry/:/tmp/registry --privileged=true registry
5、push推送到私服库
[root@localhost ~]# docker push 192.168.63.173:5000/myubuntu:1.0 The push refers to repository [192.168.63.173:5000/myubuntu] ff9ba62520f1: Pushed c5ec52c98b31: Pushed 1.0: digest: sha256:8626f06773a2d40bcab8205b6d1414aeb04a5c0a889d452686fd4cd8d245a24b size: 741
6、验证私服库镜像有哪些
curl -XGET http://192.168.63.173:5000/v2/_catalog
7、删除本地镜像,pull私服镜像
docker pull 192.168.63.173:5000/myubuntu:1.0
运行测试
docker run -it 192.168.63.173:5000/myubuntu:1.0 /bin/bash
ok