Docker Registry2.3的Cross Repository Push

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一次。
时间: 2024-10-01 13:55:11

Docker Registry2.3的Cross Repository Push的相关文章

[Docker系列·0] Docker101

Docker是什么 翻译自 whatisdocker Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for

Docker技术入门与实战(第2版).

容器技术系列 Docker技术入门与实战 第2版 杨保华 戴王剑 曹亚仑 编著 图书在版编目(CIP)数据 Docker技术入门与实战 / 杨保华,戴王剑,曹亚仑编著. -2版. -北京:机械工业出版社,2017.1 (容器技术系列) ISBN 978-7-111-55582-7 I. D- II. ①杨- ②戴- ③曹- III. Linux操作系统-程序设计 IV. TP316.85 中国版本图书馆CIP数据核字(2016)第308604号 本书从Docker基本原理开始,深入浅出地讲解Do

使用 Ansible 高效交付 Docker 容器

使用 playbook.插件和 Docker 模块设置和扩展 Ansible 环境 Docker 和它的容器工作流可封装.共享和部署您的应用程序环境.Ansible 是一个与 Docker 高度兼容的自动化工具,它使用一个强大的接口来管理远程服务器上的容器.在本文中,我将探索为何和如何使用 Ansible 的可扩展设计来将 Docker 和 Ansible 的最佳功能合并在一起. Docker 之所以如此流行,是因为它创造了一种采用方便的命令行接口 (CLI) 和 HTTP API 工具来封装.

深入浅出Docker(二):Docker命令行探秘

深入浅出Docker(二):Docker命令行探秘 1. Docker命令行 Docker官方为了让用户快速了解Docker,提供了一个交互式教程,旨在帮助用户掌握Docker命令行的使用方法.但是由于Docker技术的快速发展,此交互式教程已经无法满足Docker用户的实际使用需求,所以让我们一起开始一次真正的命令行学习之旅.首先,Docker的命令清单可以通过运行docker ,或者 docker help 命令得到: $ sudo docker 在Docker容器技术不断演化的过程中,Do

Docker安装及基本使用方法详细介绍_docker

Docker是一个用了一种新颖方式实现的超轻量虚拟机,在实现的原理和应用上还是和VM有巨大差别,专业的叫法是应用容器(Application Container).(我个人还是喜欢称虚拟机) Docker应用容器相对于 VM 有以下几个优点: 启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久 资源利用率高,一台普通PC 可以跑上千个容器,你跑上千个 VM 试试 性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能,这一部分占据了额外的资源 Docker安装 CentO

Automated Builds on Docker Hub

page_title: Automated Builds on Docker Hub page_description: Docker Hub Automated Builds page_keywords: Docker, docker, registry, accounts, plans, Dockerfile, Docker Hub, docs, documentation, trusted, builds, trusted builds, automated builds Automate

CentOS 7.X 中Docker搭建本地仓库registry 以及报错解决

去docker hub下载镜像比较慢,而且自己内部的镜像一般要求对速度和安全性要求较高,于是就可以考虑搭建本地仓库registry来实现,下边简单介绍下步骤. 环境:centos 7.2 1,安装docker yum install docker -y systemctl start docker.service systemctl enable docker.service 2,搭建仓库 下载registry docker search registry [root@docker5 regis

使用公共 Registry - 每天5分钟玩转 Docker 容器技术(19)

保存和分发镜像的最直接方法就是使用 Docker Hub. Docker Hub 是 Docker 公司维护的公共 Registry.用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中.如果不希望别人访问自己的镜像,也可以购买私有 repository. 除了 Docker Hub,quay.io 是另一个公共 Registry,提供与 Docker Hub 类似的服务. 下面介绍如何用 Docker Hub 存取我们的镜像. 首先得在 Docker Hub 上注

怎么在CentOS系统上安装Docker

  Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单.容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止.Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点. 容器和 VM(虚拟机)的主要区别是,容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离.虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短.容器使用宿主操作系统的内核,而虚拟机使用独立的内核. Docker 的局限性之一是,它只能用在 64 位的操作系统上. 在