• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    docker registry 镜像同步的实现思路

    Intro

    之前我们的 docker 镜像是保存在 Azure 的 Container Registry 里的,最近我们自己搭建了一个 docker registry,我们想把之前保存的 Azure 的 Container Registry 的 docker 镜像同步到我们自己的 docker registry 里

    实现思路

    我们的做法比较简单也比较LOW,但是基本可以满足要求,

    我们的做法是

    后来突然想起来阿里云好像有一个镜像同步工具,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 来获取,也可以分页,类似于上面获取镜像列表,可以通过 nlast 来实现分页加载

    操作示例

    在本地部署了一个测试用的 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 镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:解析阿里云centos7服务器nginx配置及常见问题解答
    下一篇:如何配置Nginx每个进程最多打开的文件数量
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    docker registry 镜像同步的实现思路 docker,registry,镜像,同步,