Docker应用之利用Registry构建Docker私服
Docker提供两种构建私服的方式:1、官方私服Docker Hub——registry;2、企业私服Harbor (goharbor.io)——harbor。本文仅介绍利用Registy构建私服,如下:
1、基础镜像的操作就赘述了。pull/save/load三个命令执行就可以了,版本就1.6以上的自由选择了。
2、运行容器
docker run -itd -v /home/docker/data/registry:/var/lib/registry -p 5000:5000 --restart=always --name docker-registry registry
注意,在运行的registry容器提供了数据卷参数。如果没有这个参数,推送的容器只会存在于容器内部;这会导致如果用户删除registry容器之后所有推送到该私有仓库的镜像都会被删除。所以为例存储镜像在实际应用中都会在启动命令中补充数据卷参数“-v <宿主机本地路径>:/var/lib/registry”——默认的镜像存储位置在/var/lib/registry。
3、添加私服仓库地址
由于默认访问协议为https,为了方便http协议也可以使用,增加配置文件/etc/docker/daemon.json,内容为{ "insecure-registries":["192.168.X.1XX:5000"] },并重启docker。
通过docker info 可以观察到如下变化,说明仓库添加成功:
通过客户端访问测试:curl -XGET http://192.168.X.1XX:5000/v2/_catalog
4、上传镜像
在向私有仓库推送镜像之前必须先使用docker tag来给即将推送的镜像打标签,因为在docker images所显示的镜像默认是从https://hub.docker.com/拉下来的,推送时如果不知道仓库地址,Docker会默认推送到https://hub.docker.com/。
docker tag tomcat 192.168.X.1XX:5000/tomcat:lifish
docker push 192.168.X.1XX:5000/tomcat:lifish
5、测试:curl http://192.168.X.1XX:5000/v2/tomcat/tags/list
将容器中tomcat镜像删除:
再使用pull命令可以从本地参考拉取tomcat镜像:
如果删除了registry容器,再启动容器还能从本地拉取镜像么?验证如下:
可以看到以上镜像中没有zookeeper,那从本地拉取一个zookeeper,试试能不能成功: