docker registry 镜像同步
docker registry 镜像同步
Intro
之前我们的 docker 镜像是保存在 Azure 的 Container Registry 里的,最近我们自己搭建了一个 docker registry,我们想把之前保存的 Azure 的 Container Registry 的 docker 镜像同步到我们自己的 docker registry 里
实现思路
我们的做法比较简单也比较LOW,但是基本可以满足要求,
我们的做法是
- 首先获取到源 Registry 里的所有镜像列表
- 然后逐个获取镜像的 tags
- 然后依次遍历将对应的镜像拉到本地,然后 docker tag 一下,命名为新的 registry 镜像名称
- 然后 push docker 镜像到新的 registry
- 删除下载到本地的镜像和推送到新的 registry 的镜像
后来突然想起来阿里云好像有一个镜像同步工具,https://github.com/AliyunContainerService/image-syncer
image-syncer是一个docker镜像同步工具,可用来进行多对多的镜像仓库同步,支持目前绝大多数主流的docker镜像仓库服务,看介绍还是很棒的,有需要 registry 之间同步镜像的可以试试这个工具,看介绍这个工具不会拉取到本地磁盘,从源 registry 获取镜像数据之后直接就推送到新的 registry 里了,效率会高很多
Docker-Registry API
docker registry 有一套规范,可以查阅 https://docs.docker.com/registry/spec/api/ 了解更多
获取所有镜像
docker registry v2 新增了一个 _catalog 的 api 可以获取所有的镜像,v1 可以用 _search 来代替
语法如下:
GET /v2/_catalog
默认最多返回100条记录,多余 100 可以通过参数 n 指定返回数量,分页的话可以指定另外一个参数 last指定完上一页返回的最后一个镜像,举个栗子: http://example.com/v2/_catalog?n=20&last=b
获取镜像的 tag
获取 docker 镜像的 tag 列表可以使用 GET /v2/<repository-name>/tags/list 来获取,也可以分页,类似于上面获取镜像列表,可以通过 n 和 last 来实现分页加载
操作示例
在本地部署了一个测试用的 docker registry 来做演示,我这里用 httpie 来做测试
获取镜像列表:
调用 _catalog 接口来获取镜像列表
http :5000/v2/_catalog

获取镜像的 tag 列表
调用 tags/list 接口获取镜像的 tag
http :5000/v2/busybox/tags/list
http :5000/v2/redis/tags/list

PowerShell 脚本
一切不是自动化的运维都是耍流氓,很有可能以后会有类似的需求,不如写个脚本自动化的跑吧
下面的脚本做了一些简化,因为我们的 azure container registry 上的数量不多,只有五六十个镜像,而且镜像只有 latest 的 tag,没有其他 tag ,所以把上面的步骤做了简化,并没有分页获取所有的镜像,也没有获取所有的 tag,实际使用的话还请自行修改后使用
# variables
$srcRegUser = "xxx"
$srcRegPwd = "111111"
$srcRegHost = "xxx.azurecr.cn"
$destRegUser = "yyy"
$destRegPwd = "222"
$destRegHost = "registry.xxx.com"
# get repositories from source registry
# httpie
$response = (http -b -a "${srcRegUser}:${srcRegPwd}" "https://${srcRegHost}/v2/_catalog") | ConvertFrom-Json
# curl
#$response = (curl -u "${srcRegUser}:${srcRegPwd}" "https://${srcRegHost}/v2/_catalog") | ConvertFrom-Json
# repository
$repositories = $response.repositories
#
Write-Host $repositories
# login source registry
docker login $srcRegHost -u $srcRegUser -p $srcRegPwd
# login dest registry
docker login $destRegHost -u $destRegUser -p $destRegPwd
# sync
foreach($repo in $repositories)
{
Write-Host "sync $repo begin"
$srcTag = "${srcRegHost}/${repo}:latest"
$destTag = "${destRegHost}/${repo}:latest"
Write-Host "source image tag: $srcTag"
Write-Host "dest image tag $destTag"
Write-Host "docker pull $srcTag begin"
docker pull $srcTag
Write-Host "docker pull $srcTag completed"
Write-Host "docker tag $srcTag $destTag ing"
docker tag $srcTag $destTag
Write-Host "docker push $destTag begin"
docker push $destTag
Write-Host "docker push $destTag completed"
Write-Host "docker rmi $srcTag $destTag begin"
docker rmi $srcTag $destTag
Write-Host "docker rmi $srcTag $destTag end"
Write-Host "sync $repo completed"
}
Write-Host "Completed..."
More
如果要同步的镜像比较多,考虑使用阿里云的镜像同步工具去同步
Reference
- https://stackoverflow.com/questions/31251356/how-to-get-a-list-of-images-on-docker-registry-v2
- https://github.com/AliyunContainerService/image-syncer
- https://docs.docker.com/registry/spec/api/
docker registry 镜像同步的更多相关文章
- 基于docker registry镜像安装私服docker hub
采用docker registry镜像安装docker私服,通过https://hub.docker.com/_/registry链接搜索registry镜像 1.输入命令:docker pull r ...
- 删除docker registry镜像脚本
使用: 删除指定镜像:/usr/local/bin/delete_docker_registry_image -i 镜像名 删除指定镜像指定标签:/usr/local/bin/delete_docke ...
- Docker(十二)-Docker Registry镜像管理
Registry删除镜像.垃圾回收 Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据.在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令, ...
- docker registry 镜像删除
registry:2.5.0版本的镜像,将镜像默认存放在了/var/lib/registry 目录下 /var/lib/registry/docker/registry/v2/repositories ...
- 在Ubuntu14.04系统POWER8服务器上搭建Docker Registry服务
本文描述了如何在POWER8服务器上搭建一个本地化的Docker镜像仓库,主要涉及镜像制作,Docker Registry服务启动等.希望能够对在非X86服务器上搭建Docker仓库的同学提供参考. ...
- 搭建docker registry (htpasswd 认证)
1,拉取docker registry 镜像 docker pull registry 2,创建证书存放目录 mkdir -p /home/registry 3,生成CA证书Edit your /et ...
- Docker系列06—基于容器制作镜像并上传到Docker Registry
本文收录在容器技术学习系列文章总目录 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容器制作镜像:基于dockerfile 制 ...
- docker(五) 使用Docker Registry搭建镜像私服
1.创建私服 docker run -d --name registry -v /opt/data/registry:/var/lib/registry -p 5000:5000 registry - ...
- [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库
本文转自:https://blog.csdn.net/BigData_Mining/article/details/88233015 1.背景 在 Docker 中,当我们执行 docker pull ...
随机推荐
- MVC4.0接口学习
/// <summary> /// 正则验证身份证号是否合法 /// </summary> /// <param name="sIdCard"> ...
- PAT-1059 Prime Factors (素数因子)
1059. Prime Factors Given any positive integer N, you are supposed to find all of its prime factors, ...
- 基于postman测试接口(整套接口测试)
基于postman测试接口(整套接口测试) 可以解决的问题 几百个接口人工测试接口过于繁杂 大多测试无法使用请求结果当参数 可以使用随机参数 支持swagger信息导入 随账号持久化保存数据 对集合一 ...
- windows 10 2016 企业版 长期服务 激活方式
试了很多,失败. 使用这个ok———————————————————————————————— 使用方式: 2.1.下载AAct.exe https://www.baidu.com/link?url ...
- C# 使用Word模板导出数据
使用NPOI控件导出数据到Word模板中方式: 效果如下: Word模板: 运行结果: 实现如下: Student.cs using System; using System.Collections. ...
- SpringCloud(四)- Hystris简介及@EnableCircuitBreaker 和 @HystrixCommand 注解的使用
唯能极于情,故能极于剑有问题或错误请及时联系小编或关注小编公众号 “CodeCow”,小编一定及时回复和改正,期待和大家一起学习交流 此文由四部分组成(Hystris简介.@EnableCircuit ...
- 痞子衡嵌入式:MCUBootUtility v2.3发布,这次不再放过任何一款Flash
-- 痞子衡的 NXP-MCUBootUtility 开源项目自2018年8月27日第一笔提交至今已有21个月,目前累计代码已近50000行.相信这个工具为大家开发 i.MXRT 项目提供了一些便利, ...
- 初尝 Blazor WebAssembly
一. 前言 Blazor 的整体介绍以及特点与优势,建议翻阅 Blazor 介绍. Blazor 是一个可是使用 .NET/C# 来编写交互式客户端的 Web UI 框架,在官网有一句话概括 &quo ...
- BZOJ1003 物流运输 题解
发现\(n,m\)很小,我们可以先把任意\(2\)天的最短路都给求出来,考虑\(DP\),设\(f[i][j]\)表示\(j+1\)~ \(i\)这几天内走的是最短路线的最优方案,显然最优情况下\(j ...
- css background-image 学习笔记
先给出图片原样 1.默认从从上到右下1比1 填充的,如果元素的高度和宽度小于图片,则只能显示部分图片.效果如下图 2.如果元素的高度和宽度大于图片,则默认会用图片平铺元素.效果如下图 3.可以是用ba ...