如何從docker將image鏡像到私人的registry

來源:互聯網
上載者:User

docker越來越炙手可熱,如果你的團隊已經準備開始使用docker,那麼私人倉庫是必不可少的東西,首先是可以協助你加快從伺服器pull鏡像的速度,其次也可以協助你存放私人的鏡像,本文主要為大家介紹如何從公用伺服器上講開放的images備份到本地私人伺服器上。

本文中以index中的ubuntu鏡像舉例

從官方的Index伺服器上下載ubuntu鏡像
docker pull ubuntu
查看現有的images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 9f676bd305a4 5 weeks ago 178 MB
ubuntu saucy 9f676bd305a4 5 weeks ago 178 MB
ubuntu raring eb601b8965b8 5 weeks ago 166.5 MB
ubuntu 13.04 eb601b8965b8 5 weeks ago 166.5 MB
ubuntu 12.10 5ac751e8d623 5 weeks ago 161 MB
ubuntu quantal 5ac751e8d623 5 weeks ago 161 MB
ubuntu 10.04 9cc9ea5ea540 5 weeks ago 180.8 MB
ubuntu lucid 9cc9ea5ea540 5 weeks ago 180.8 MB
ubuntu 12.04 9cd978db300e 5 weeks ago 204.4 MB
ubuntu latest 9cd978db300e 5 weeks ago 204.4 MB
ubuntu precise 9cd978db300e 5 weeks ago 204.4 MB

一般來講,我們會使用最新版本的ubuntu,大家可以發現多個TAG對應同一個image,Tag只是一個名字而已。

為需要push到私人registry的image打tag
docker tag 9cd978db300e rd-server:5000/ubuntu

我們可以執行docker images查看效果

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 9f676bd305a4 5 weeks ago 178 MB
ubuntu saucy 9f676bd305a4 5 weeks ago 178 MB
ubuntu raring eb601b8965b8 5 weeks ago 166.5 MB
ubuntu 13.04 eb601b8965b8 5 weeks ago 166.5 MB
ubuntu 12.10 5ac751e8d623 5 weeks ago 161 MB
ubuntu quantal 5ac751e8d623 5 weeks ago 161 MB
ubuntu 10.04 9cc9ea5ea540 5 weeks ago 180.8 MB
ubuntu lucid 9cc9ea5ea540 5 weeks ago 180.8 MB
ubuntu 12.04 9cd978db300e 5 weeks ago 204.4 MB
ubuntu latest 9cd978db300e 5 weeks ago 204.4 MB
ubuntu precise 9cd978db300e 5 weeks ago 204.4 MB
rd-server:5000/ubuntu latest 9cd978db300e 5 weeks ago 204.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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.