1. 程式人生 > >解決`docker pull`被複位的問題

解決`docker pull`被複位的問題

首先,需要明確一個問題:Mirror 與 Private Registry 有什麼區別?

二者有著本質的差別。

Private Registry 是開發者或者企業自建的映象儲存庫,通常用來儲存企業內部的 Docker 映象,用於內部開發流程和產品的釋出、版本控制。 Mirror 是一種代理中轉服務,我們(指daocloud)提供的 Mirror 服務,直接對接 Docker Hub 的官方 Registry。Docker Hub 上有數以十萬計的各類 Docker 映象。 在使用 Private Registry 時,需要在 Docker Pull 或 Dockerfile 中直接鍵入 Private Registry 的地址,通常這樣會導致與 Private Registry 的繫結,缺乏靈活性。 使用 Mirror 服務,只需要在 Docker 守護程序(Daemon)的配置檔案中加入 Mirror 引數,即可在全域性範圍內透明的訪問官方的 Docker Hub,避免了對 Dockerfile 映象引用來源的修改。

簡單來說,Mirror類似CDN,本質是官方的cache;Private Registry類似私服,跟官方沒什麼關係。對我來說,由於我是要拖docker hub上的image,對應的是Mirror。 yum/apt的mirror又有點不一樣,它其實是把官方的庫檔案整個拖到自己的伺服器上做映象(不管有沒有用),並定時與官方做同步;而Docker mirror只會快取曾經使用過的image。

目前國內訪問docker hub非常便祕,使用docker mirror勢在必行。現有提供服務的有三家:ustc、daocloud、aliyun,下面會一一介紹。

2017-03-06 更新:新增網易docker映象

選擇零:網易163 docker映象

$ sudo echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
$ service docker restart

一般來說,網易的豬肉比市場上的豬肉好吃。

選擇一:ustc的映象

ustc是老牌的linux映象服務提供者了,還在遙遠的ubuntu 5.04版本的時候就在用。之前在blog裡有提到可以用ustc的docker倉庫映象,使用方法參考ustc docker 映象使用幫助

ustc的docker映象速度不錯,一直用的挺happy。但是今天發現不好使了,可能跟這件事有關係吧,今天嘗試去pull ubuntu,非常慢,應該是直接去docker hub上去拉了,基本沒有加速效果。

ustc docker mirror的優勢之一是,不需要註冊,公共服務(這才是我熟悉的ustc嘛)。

選擇二:daocloud

DaoCloud也提供了docker加速器,但是跟ustc不同,需要使用者註冊後才能使用,並且每月限制流量10GB。linux上使用比較簡單,一條命令搞定:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://{your_id}.m.daocloud.io

實際改的是/usr/lib/systemd/system/docker.service,加了個–registry-mirror引數,:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=http://{your_id}.m.daocloud.io\

設定後,需要重新載入配置&重啟:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

但是!今天使用DaoCloud的docker加速器體驗非常差,加速效果基本沒感覺,果斷放棄。

選擇三:alicloud

阿里雲也提供了docker加速器,不過比ustc更麻煩:不光要註冊為阿里雲的使用者,還得加入開發者平臺。不過捏著鼻子昨晚這些以後,它的服務還真是不錯,基本1MB/s的pull速度(部分原因可能是因為我也在杭州吧)。配置方法跟daocloud類似,也是開通加速器以後給一個url。

我直接去改/usr/lib/systemd/system/docker.service了:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=https://{your_id}.mirror.aliyuncs.com\

重新載入配置&重啟:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

pull的時候還是顯示docker.io,但速度一點都不docker.io。

# docker pull ubuntu
Using default tag: latest
Trying to pull repository docker.io/library/ubuntu ...
latest: Pulling from docker.io/library/ubuntu
cad964aed91d: Pull complete
3a80a22fea63: Pull complete
50de990d7957: Pull complete
61e032b8f2cb: Pull complete
9f03ce1741bf: Pull complete
Digest: sha256:28d4c5234db8d5a634d5e621c363d900f8f241240ee0a6a978784c978fe9c737
Status: Downloaded newer image for docker.io/ubuntu:latest

綜上,雖然aliyun docker mirror有這樣那樣的不爽,但的確是目前最好的服務。當然,等ustc恢復正常了,我還是會切到ustc的。