【docker系列】使用registry-v2搭建镜像仓库及完成镜像分发

完成镜像制作之后,需要通过渠道将镜像分发出去

  • 公有仓库:除了Docker官方的DockerHub之外,国内也有很多的公有镜像仓库可以用于镜像分发:docker中国官方库、阿里云镜像仓库等等。
  • 私有仓库:如果制作的镜像只是在企业内为各个项目组服务,就不可能上传到公有仓库,而是需要企业内部搭建私有仓库。

目前广泛应用的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配置仓库地址

仓库搭建成功了,下一步我们就可以向仓库中提交镜像了。但是当我们真正去做的时候,会发现镜像根本提交不上去。效果如下:

这是因为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

猜你喜欢

转载自blog.csdn.net/hanxiaotongtong/article/details/124939427