【編者的話】DockerOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第四篇,介紹了Docker Registry,它是Docker中的重要組件。本文經過情景演繹的方式對其進行了介紹,圖文並茂,強烈推薦讀者閱讀。
在
Docker系列教程的上一篇文章中,咱們討論了Dockerfile的重要性並提供了一系列Dockerfile的命令,使鏡像的自動構建更加容易。在這篇文章中,咱們將介紹Docker的一個重要組件:Docker Registry。它是全部倉庫(包括共有和私有)以及工做流的中央Registry。在深刻Docker Registry以前,讓咱們先去看看一些常見的術語和與倉庫相關的概念。
- Repositories(倉庫)能夠被標記爲喜歡或者像書籤同樣標記起來
- 用戶能夠在倉庫下評論。
- 私有倉庫和共有倉庫相似,不一樣之處在於前者不會在搜索結果中顯示,也沒有訪問它的權限。只有用戶設置爲合做者才能訪問私有倉庫。
- 成功推送以後配置webhooks。
Docker Registry有三個角色,分別是index、registry和registry client。
角色 1 -- Index
index
負責並維護有關用戶賬戶、鏡像的校驗以及公共命名空間的信息。它使用如下組件維護這些信息:
這也分解了較長的URL,以方便使用和驗證用戶存儲庫。
角色 2 --Registry
registry
是鏡像和圖表的倉庫。然而,它沒有一個本地數據庫,也不提供用戶的身份認證,由S三、雲文件和本地文件系統提供數據庫支持。此外,經過Index Auth service的Token方式進行身份認證。Registries能夠有不一樣的類型。如今讓咱們來分析其中的幾種類型:
- Sponsor Registry:第三方的registry,供客戶和Docker社區使用。
- Mirror Registry:第三方的registry,只讓客戶使用。
- Vendor Registry:由發佈Docker鏡像的供應商提供的registry。
- Private Registry:經過設有防火牆和額外的安全層的私有實體提供的registry。
角色 3 --Registry Client
Docker充當registry客戶端來負責維護推送和拉取的任務,以及客戶端的受權。
Docker Registry工做流程詳解
如今,讓咱們討論五種情景模式,以便更好地理解Docker Registry。
情景A:用戶要獲取並下載鏡像。所涉及的步驟以下:
- 用戶發送請求到index來下載鏡像。
- index 發出響應,返回三個相關部分信息:
- 該鏡像所處的registry
- 該鏡像包括全部層的校驗
- 以受權爲目的的Token > 注意:當請求header裏有X-Docker-Token時纔會返回Token。而私人倉庫須要基本的身份驗證,對於公有倉庫這一點不是強制性的。
- 用戶經過響應後返回的Token和registry溝通,registry全權負責鏡像,它用來存儲基本的鏡像和繼承的層。
- registry如今要與index證明該token是被受權的。
- index會發送「true」 或者 「false」給registry,由此斷定是否容許用戶下載所須要的鏡像。
情景B:用戶想要將鏡像推送到registry中。其中涉及的步驟以下:
- 用戶發送附帶證書的請求到index要求分配庫名。
- 在認證成功,命名空間可用以後,庫名也被分配。index發出響應返回臨時的token。
- 鏡像連帶token,一塊兒被推送到registry中。
- registry與index證明token被受權,而後在index驗證以後開始讀取推送流。
- 該index由Docker校驗的鏡像更新。
情景C:用戶想要從index或registry中刪除鏡像:
- index接收來自Docker一個刪除庫的信號。
- 若是index對庫驗證成功,它將刪除該庫,並返回一個臨時的token。
- registry如今接收到帶有該token的刪除信號。
- registry與index覈實該token,而後刪除庫以及全部與其相關的信息。
- Docker如今通知有關刪除的index,而後index移除庫的全部記錄。
情景D:用戶但願在沒有index的獨立模式中使用registry。
使用沒有index的registry,這徹底由Docker控制,它最適合於在私有網絡中存儲鏡像。registry運行在一個特殊的模式裏,此模式限制了registry與Docker index的通訊。全部有關安全性和身份驗證的信息須要用戶本身注意。
情景E:用戶想要在有index的獨立模式中使用registry。
在這種狀況下,一個自定義的index會被建立在私有網絡裏來存儲和訪問鏡像的問題。然而,通知Docker有關定製的index是耗時的。 Docker提供一個有趣的概念chaining registries,從而,實現負載均衡和爲具體請求而指定的registry分配。在接下來的Docker教程系列中,咱們將討論如何在上述每一個情景中使用Docker Registry API ,以及深刻了解Docker Security。
原文連接:
Part 4: Registry & Workflows(翻譯:
田浩浩 審校:李穎傑)