歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux業界

DaoCloud宣布Docker Hub Mirror服務永久免費

2014年末,DaoCloud博客發布了《玩轉Docker鏡像》一文,以非常低調的方式宣布了Docker Hub Mirror服務的正式上線。在國內特殊網絡環境下,Mirror服務顯著加快了Docker Image的下載速度。一轉眼,3個月過去了,在沒有任何大規模推廣宣傳的情況下,Mirror服務用戶已經達到數千人,各類Docker Image下載總量超過了5萬。

今天,我們正式宣布,由DaoCloud運維Docker Hub Mirror服務,永久免費

什麼是Docker Hub Mirror?

根據Docker的官方文檔,Mirror的定義是:

Such a registry is provided by a third-party hosting infrastructure but is targeted at their customers only. Some mechanism ensures that public images are pulled from a sponsor registry to the mirror registry, to make sure that the customers of the third-party provider can docker pull those images locally.
Mirror是Docker Registry的一種特殊類型,它起到了類似代理服務器的緩存角色,在用戶和Docker Hub之間做Image的緩存。 這個功能的設計目的是為了企業客戶訪問Docker Hub時降低網絡開銷,然而在中國這個巨大的局域網環境中,Mirror恰恰可以作為提升牆內下載速度的一種手段。

Mirror跟Private Registry有本質區別。Private Registry是開發者或者企業自建的Image存儲庫,通常用來保存企業內部的Docker Image,用於內部開發流程和產品的發布、版本控制。Mirror是一種代理中轉服務,我們提供的Mirror服務,直接對接Docker Hub的官方Registry,Docker Hub上有數以十萬計的各類Docker Image。在使用Private Registry時,需要在Docker Pull,或Dockerfile中直接鍵入Private Registry的地址,通常這樣會導致跟Private Registry的綁定,缺少靈活性。使用Mirror服務,只需要在Docker Daemon的配置文件中加入Mirror參數,即可在全局范圍內透明的訪問官方的Docker Hub,避免了對Dockerfile Image引用來源的修改。


Mirror服務後台架構實現

Mirror是Docker的官方機制,它是Registry的一種特殊類型,在部署了Registry之後,需要開啟Mirror模式並做一定的配置。具體的流程如下:

准備工作

  • 在公有雲環境部署Mirror Registry,並優化存儲和網絡訪問(後文會詳述)
  • 在客戶端,修改Docker的配置文件,添加registry-mirror參數(Mirror控制台中有詳細的配置步驟)

Docker Hub由Index和Registry構成,Index保存Image Layer的hash和關聯關系等元數據(Metadata),Registry用於存儲Image Layer的實際二進制數據。在客戶端沒有配置registry-mirror參數的情況下,每一次docker pull,客戶端都會先連接Index獲取元數據,然後再連接Registry獲取實際的Image文件。由於Docker Hub的Index節點和Regsitry都部署國外,國內用戶訪問,經常遭遇連接超時或中斷的情況,下載速度也極其緩慢。在啟用了Mirror之後,訪 問流程如下:
  • 客戶端的Docker Daemon連接Index獲取Metadata,這一部分的數據量極小,直連國外的速度可以忍受
  • 根據Metadata的信息,Docker Daemon與Mirror服務器建立連接。如果pull的Image在Mirror上已經有緩存,就直接在Mirror上返回地址並下載
  • 如果Image在Mirror並無緩存,Mirror會與Docker Hub Registry建立連接,下載Image,提供給用戶的同時,在本地緩存
  • Mirror下載Docker Hub Image采用stream的方式,即可以一邊下載,一邊提供給客戶端的Docker Daemon,不必等Image完全下載完

通過以上的描述,可以發現,對於常用的Image,Mirror緩存命中率會非常高,如Ubuntu等基礎Image,這會極大提高下載速度。同時,Docker Image采用分層的結構,即使Image被更新,也只是下載最新一層非常少的增量數據。

Mirror服務亦可以通過網絡優化,加速對遠端Docker Hub Registry的訪問速度,如采用高速的商業VPN建立從Mirror到Docker Hub Registry的訪問。通過七牛等雲存儲和CDN分發網絡,會進一步提高國內客戶端的下載速度。

Mirror服務雲端部署架構

下圖是DaoCloud在搭建Mirror服務時,采用的架構。


Mirror_Arch我們選擇了UCloud和七牛雲存儲。這樣的架構是基於以下的幾個考慮:
  • 我們的Mirror服務主節點位於UCloud北京BGP機房。BGP機房網絡上行下行的速度都非常快,有助於獲得穩定高速的對外訪問帶寬,在Docker Hub Regsitry下載Image,獲得不錯的速度。
  • 我們擴展了Mirror的Registry Disk Driver,使它可以支持UCloud的UDisk服務。
  • BGP 機房的雲主機需要綁定外網IP,並且是根據帶寬收費。提供類似Image下載服務,開銷巨大。因此我們把下載緩存完成後的靜態Image文件,定期同步到 七牛雲,既降低了帶寬成本,同時也享受到了CDN的加速。我們通過代碼檢測需要下載的Image Layer是否在七牛有保存,如果有,就把訪問重定向到七牛的URL,如果沒有,就從UCloud的UDisk 直接下載。代碼如下: Code.jpg

Mirror服務線上數據統計

Mirror服務上線至今,我們已經積累了數以千計的注冊用戶,在UDisk和七牛使用了超過 100個GB的Image緩存,每月的下載API調用達到了3-4萬次,網絡流量峰值曾突破10個GB,平均下載速度超過了1MBps,下載速度峰值曾經 達到過8MBps。下圖是我們在七牛控制台的統計數據截圖:
原文:http://dockerone.com/article/263
Copyright © Linux教程網 All Rights Reserved