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

jopen 10年前發布 | 96K 次閱讀 Docker

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模式并做一定的配置。具體的流程如下:
DaoCloud 宣布 Docker Hub 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的訪問速度,如采用高速的商業V*N建立從Mirror到Docker Hub Registry的訪問。通過七牛等云存儲和CDN分發網絡,會進一步提高國內客戶端的下載速度。

Mirror服務云端部署架構

下圖是DaoCloud在搭建Mirror服務時,采用的架構。
DaoCloud 宣布 Docker Hub 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 直接下載。

代碼如下:

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

Mirror服務線上數據統計

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

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

寫在最后

作為Docker技術的堅決擁護者,我們深刻理解Docker Hub對每一個程序員的重要性,也不遺余力解決國內網絡訪問的速度問題。

DaoCloud將堅持提供Docker Hub Mirror服務,我們承諾永久免費。

借此文,也感謝UCloud和七牛云存儲,感謝他們在Mirror服務搭建和運維過程中為DaoCloud提供的支持和幫助。

還沒體驗過Mirror服務?趕緊注冊:https://www.daocloud.io/account/signup

原文:http://dockerone.com/article/263

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!