打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何从docker将image镜像到私有的registry

        docker越来越炙手可热,如果你的团队已经准备开始使用docker,那么私有仓库是必不可少的东西,首先是可以帮助你加快从服务器pull镜像的速度,其次也可以帮助你存放私有的镜像,本文主要为大家介绍如何从公用服务器上讲开放的images备份到本地私有服务器上。

本文中以index中的ubuntu镜像举例

从官方的Index服务器上下载ubuntu镜像

docker pull ubuntu

查看现有的images

REPOSITORYTAGIMAGE IDCREATEDVIRTUAL SIZE
ubuntu13.109f676bd305a45 weeks ago178 MB
ubuntusaucy9f676bd305a45 weeks ago178 MB
ubunturaringeb601b8965b85 weeks ago166.5 MB
ubuntu13.04eb601b8965b85 weeks ago166.5 MB
ubuntu12.105ac751e8d6235 weeks ago161 MB
ubuntuquantal5ac751e8d6235 weeks ago161 MB
ubuntu10.049cc9ea5ea5405 weeks ago180.8 MB
ubuntulucid9cc9ea5ea5405 weeks ago180.8 MB
ubuntu12.049cd978db300e5 weeks ago204.4 MB
ubuntulatest9cd978db300e5 weeks ago204.4 MB
ubuntuprecise9cd978db300e5 weeks ago204.4 MB

一般来讲,我们会使用最新版本的ubuntu,大家可以发现多个TAG对应同一个image,Tag只是一个名字而已。

为需要push到私有registry的image打tag

docker tag 9cd978db300e rd-server:5000/ubuntu

我们可以执行docker images查看效果

REPOSITORYTAGIMAGE IDCREATEDVIRTUAL SIZE
ubuntu13.109f676bd305a45 weeks ago178 MB
ubuntusaucy9f676bd305a45 weeks ago178 MB
ubunturaringeb601b8965b85 weeks ago166.5 MB
ubuntu13.04eb601b8965b85 weeks ago166.5 MB
ubuntu12.105ac751e8d6235 weeks ago161 MB
ubuntuquantal5ac751e8d6235 weeks ago161 MB
ubuntu10.049cc9ea5ea5405 weeks ago180.8 MB
ubuntulucid9cc9ea5ea5405 weeks ago180.8 MB
ubuntu12.049cd978db300e5 weeks ago204.4 MB
ubuntulatest9cd978db300e5 weeks ago204.4 MB
ubuntuprecise9cd978db300e5 weeks ago204.4 MB
rd-server:5000/ubuntulatest9cd978db300e5 weeks ago204.4 MB

将ubuntu push到私有registry

docker push rd-server:5000/ubuntu

如何将ubuntu的所有分支都镜像到自己的私有仓库?

1.先打TAG,把需要的版本打上标签,然后进行推送

语句大概是这个样子的:

docker tag eb601b8965b8 rd-server:5000/ubuntu:raringdocker tag eb601b8965b8 rd-server:5000/ubuntu:13.04docker tag 9f676bd305a4 rd-server:5000/ubuntu:saucydocker tag 9f676bd305a4 rd-server:5000/ubuntu:13.10docker tag 9cd978db300e rd-server:5000/ubuntu:precisedocker tag 9cd978db300e rd-server:5000/ubuntu:latestdocker tag 9cd978db300e rd-server:5000/ubuntu:12.04docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:luciddocker tag 9cc9ea5ea540 rd-server:5000/ubuntu:10.04docker tag 5ac751e8d623 rd-server:5000/ubuntu:quantaldocker tag 5ac751e8d623 rd-server:5000/ubuntu:12.10

开始推送

docker push rd-server:5000/ubuntu

如果返回的内容的最后一行是下面这个样子的

2014/03/14 08:22:14 push: }

请反复执行,没错,不要怀疑,请循环一直反复执行下去

docker pull rd-server:5000/ubuntu

直到不再出现 push: }的字样

不知道这是docker的BUG还是本身设计是这样的,需要反复多次push才能将完整的tag推送到private registry里,否则在客户端下载的时候总会提示某些image找不到,个人猜测可能是这么设计的,因为docker image比较大,而一个repo会有很多的块文件,每次push的时候只Push一个块,好了,猜测就道这,活还是得干,所以,写个脚本解决手工的问题吧。

#!/bin/sh##Copyright (c) 2014 ZhengXujin xujinzheng@gmail.com#server="127.0.0.1:5000"index_repo_name="username/ubuntu"private_repo_name="ubuntu"echo "\n"echo "                        ##        ."echo "                  ## ## ##       =="echo "               ## ## ## ##      ==="echo "           /""""""""""""""""\___/ ==="echo "      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~"echo "           \______ o          __/"echo "             \    \        __/"echo "              \____\______/" echo "\n"idx=0is_continue=1docker images|grep -q "$server/$private_repo_name"if [[ $? -ne 0 ]]; then    docker images|grep $index_repo_name|awk -F" " '{printf("docker tag %s %s/%s:%s\n",$3,"'$server'","'$private_repo_name'",$2)}'|bashfiwhile [ $is_continue -eq 1 ]do   docker push $server/$private_repo_name   is_continue=$?   let idx=$idx+1   echo "$(tput setaf 1)continue push, $idx times pushed. $(tput sgr 0)"done

从客户端获取私有库的镜像

docker pull rd-server:5000/ubuntu

或者获取某个版本的ubuntu

docker pull -t 13.04 rd-server:5000/ubuntu

在从公有库往私有库上推送的时候,可能会遇到一些依赖的镜像并没有完全推送到服务器上,在客户端pull的时候会有错误,提示如下

eb601b8965b8: Error pulling image (13.04) from rd-server:5000/ubuntu, Server error: 400 trying to fetch remote history for eb601b9cd978db300e: Download complete

请反复执行下面的语句,一直到完整上传所有的images

docker push rd-server:5000/ubuntu

当然也不是每次出现这样的问题都是因为上传不完整导致的,也有可能是pull的客户端网络不好,如果反复出现相同问题,就需要考虑上面的方法

如果出现如下的问题,请将主机名直接换成IP来pull库

Invalid Registry endpoint: Get http://rd-server:5000/v1/_ping: dial tcp: lookup rd-server: no such host

例如

docker pull 172.16.1.88:5000/ubuntu
http://blog.csdn.net/zealczg/article/details/21257715
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
搭建自己的 Docker 私有仓库服务 | vpsee.com
Docker私有仓库Registry的搭建验证
docker 私有仓库从无到有
容器技术之Docker基础入门
Ubuntu 16.04上Docker使用手记
Docker
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服