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

本文中以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:raring
docker tag eb601b8965b8 rd-server:5000/ubuntu:13.04
docker tag 9f676bd305a4 rd-server:5000/ubuntu:saucy
docker tag 9f676bd305a4 rd-server:5000/ubuntu:13.10
docker tag 9cd978db300e rd-server:5000/ubuntu:precise
docker tag 9cd978db300e rd-server:5000/ubuntu:latest
docker tag 9cd978db300e rd-server:5000/ubuntu:12.04
docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:lucid
docker tag 9cc9ea5ea540 rd-server:5000/ubuntu:10.04
docker tag 5ac751e8d623 rd-server:5000/ubuntu:quantal
docker 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=0
is_continue=1

docker 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)}'|bash
fi

while [ $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

转载于:https://my.oschina.net/zeal/blog/208418

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值