赞
踩
完成镜像制作之后,需要通过渠道将镜像分发出去
目前广泛应用的Docker 官方提供的私有仓库是Docker Registry V2,下面我们就来学习一下如何搭建及使用它。
既然我们已经学习了Docker,使用Docker 搭建软件服务是高效便捷的方式,即使Docker 私有仓库也不例外。下载镜像:
docker pull registry:2
在私有仓库所在的主机目录新建一个文件夹,用于持久化保存仓库中的镜像。
mkdir -p /opt/registry;
使用docker镜像启动私有仓库容器服务,将容器内/var/lib/registry
路径映射到宿主机/opt/registry
用于持久化保存仓库中的镜像。
docker run -d \
-v /opt/registry:/var/lib/registry \
-p 5000:5000 \
--name zimug-repo registry:2
容器启动成功之后,通过浏览器访问私有仓库所在的宿主机,端口映射5000。得到下面的结果,证明我们的私有仓库搭建成功了。
仓库搭建成功了,下一步我们就可以向仓库中提交镜像了。但是当我们真正去做的时候,会发现镜像根本提交不上去。效果如下:
这是因为Docker Registry V2从安全角度考虑禁止了HTTP协议传输镜像数据,默认支持HTTPS。其实如果企业内部使用HTTPS也没有很大的必要。可以通过下面的方法绕过这道坎,修改文件vim /etc/docker/daemon.json
,增加insecure-registries配置,值为私有仓库的访问地址。
{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries":["192.168.1.111:5000"]
}
本文先为大家使用这种非HTTPS的搭建方式,在企业级应用中经常使用的是Harbor(依赖于Registry)作为镜像仓库,并且提供图形界面管理,后面文章中会为大家介绍。本文先对docker 私有镜像仓库有个概念,并且会向仓库推送镜像即可。
修改配置完成之后重启docker服务,重启docker服务容器停止,所以zimug-repo容器也重启一下
# systemctl daemon-reload
# systemctl restart docker
# docker restart zimug-repo
私有镜像仓库搭建完成,并且支持HTTP协议传输,下面我们就可以上传镜像文件了。在此之前我们还需要为镜像打标签,如下:
docker tag zimug/jdk:11 192.168.1.111:5000/jdk:11
可以看出来为镜像打标签的目的,就是为镜像指定私有仓库的ip地址+端口,表明镜像上传到哪个仓库。使用docker push
命令将镜像文件上传到私有仓库。
# docker push 192.168.1.111:5000/jdk:11
The push refers to repository [192.168.1.111:5000/jdk]
c439a7f02e2b: Pushed
78e244823116: Pushed
174f56854903: Pushed
11: digest: sha256:b137394b3ce324bb6c71967a7e7337265510b23a8c4f4c02fcfff9d29a946133 size: 955
需要说明的是Docker Registry并不提供UI操作界面(后续文章会介绍Harbor图形界面化工具),所以我们想知道镜像是否上传成功需要通过API的方式查询,如下:
# 查询镜像仓库中镜像的分类
http://192.168.1.111:5000/v2/_catalog
{"repositories":["jdk"]}
# 查询奖项仓库中的镜像
http://192.168.1.111:5000/v2/jdk/tags/list
{"name":"jdk","tags":["11"]}
另外我们可以看一下宿主机中/opt/registry
,该目录是私有仓库容器持久化镜像数据在宿主机上的映射目录,用于持久化保存镜像。可以看到其目录下包含我们上传的JDK镜像数据及目录,也可以证明镜像上传成功了。
镜像上传成功之后,在任何一台安装了docker的服务器上,都可以获取私有仓库中的镜像,如:docker pull 192.168.1.111:5000/jdk:11
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。