Docker Registry2.3的Cross Repository Push

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Registry介绍 Docker用户肯定都是pull过镜像,这是最基本的Docker操作。Pull镜像就是把镜像从Registry下载到本地的过程。Registry是Docker的镜像存储、分发服务。Docker官方提供了默认Registry服务,第三方也可以部署自己的Registry服务。阿里

Registry介绍

Docker用户肯定都是pull过镜像,这是最基本的Docker操作。Pull镜像就是把镜像从Registry下载到本地的过程。Registry是Docker的镜像存储、分发服务。Docker官方提供了默认Registry服务,第三方也可以部署自己的Registry服务。阿里云Hub服务使用的就是自己的Registry服务,因为在国内,所以Pull、Push镜像都很快。

Registry1到2

目前Docker Registry有两个版本: v1和v2。Docker的向后兼容做的很差,v2和v1的registry变化很大,完全不兼容。Docker1.6开始支持v2,后续版本会放弃对v1的支持,只支持v2。目前阿里云Hub服务提供的是v2版本的registry,需要使用docker1.6+.

Registry2.3的Cross Repository Push

终于说到本文的重点了。Registry2.3之前,Docker Registry一直不支持跨Repository之间的层共享。举个栗子:我从阿里云Hub pull了一个Ubuntu的镜像 registry.aliyuncs.com/acs-sample/ubuntu,基于这个镜像构建了我自己的应用镜像:registry.aliyuncs.com/jiangjizhong/myapp,然后registry.aliyuncs.com/jiangjizhong/myapp push回阿里云hub服务。

cd myapp
docker pull registry.aliyuncs.com/acs-sample/ubuntu
docker build -t registry.aliyuncs.com/jiangjizhong/myapp .
docker push registry.aliyuncs.com/jiangjizhong/myapp

可以看到,Docker会把registry.aliyuncs.com/jiangjizhong/myapp对应的所有数据全部推送到Hub服务上,包括Ubuntu对应的层。很多人可能会疑惑:Ubuntu明明已经在Hub上了,为什么不重用,还要再推过去一次?确实,不过Docker就是这么做的。我自己的应用可能很小,大量的时间花费在Push Ubuntu上了。考虑另外一个场景:我们有持续集成环境,基于我们自己的Base镜像,把每个应用都构建成Docker镜像,Push到Hub上去,由于镜像数量很多,每个应用都是要Push一次Base镜像,浪费了大量的时间。

2.3 Registry终于解决了这个问题:可以跨Repository共享层。上面的例子中,可以不再多次Push Base镜像,而可以利用Registry里已有的镜像。

不过还是有很多要注意的点。

  • 首先,Docker的版本要升级到1.10+,低版本的Docker不支持这个功能。
  • 其次,是否重新Push Base镜像是由本地的Docker决定的,而不是Registry。Docker怎么知道Registry上有没有Base镜像呢?它判断的方式也比较简单:如果已经Push过一次,Registry上肯定存在了这个层,如果曾经Pull过,Registry上肯定也存在这个层。Docker会保存这些信息,再根据这些信息判断是否重用Registry上层。因此,如果你是刚刚安装的Docker,Push镜像一定会全部层都Push一次。
目录
相关文章
|
Linux 数据安全/隐私保护 Docker
Docker push 镜像到dockerhub网站
本文是博主学习docker镜像的记录,希望对大家有所帮助。
110 0
Docker push 镜像到dockerhub网站
|
应用服务中间件 Linux Docker
Docker - 解决 docker push 上传镜像报:denied: requested access to the resource is denied 的问题
Docker - 解决 docker push 上传镜像报:denied: requested access to the resource is denied 的问题
1105 0
Docker - 解决 docker push 上传镜像报:denied: requested access to the resource is denied 的问题
|
jenkins Linux 持续交付
Docker(27)- docker push 命令详解
Docker(27)- docker push 命令详解
857 0
Docker(27)- docker push 命令详解
|
Java Docker 容器
DOCKER01_概述、软件安装、镜像命令、容器命令、(日志、进入容器、拷贝)、提交、push、(导入、导出)、(save、load)(六)
⑩③. 容器export导出jar和import导入为一个镜像 ①④. 镜像 save保存镜像jar和load将jar转换为镜像
117 0
DOCKER01_概述、软件安装、镜像命令、容器命令、(日志、进入容器、拷贝)、提交、push、(导入、导出)、(save、load)(六)
|
XML 前端开发 Linux
|
Docker 容器
docker私有仓库构建,上传,下载 push,pull
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80415332 1、下...
2167 0
|
Java Shell Maven
使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
使用Maven插件构建Docker镜像,将Docker镜像push到DockerHub上,或者私有仓库,上一篇文章是手写Dockerfile,这篇文章借助开源插件docker-maven-plugin 进行操作
4155 1