1. 程式人生 > >Docker入門教程(四)Docker Registry

Docker入門教程(四)Docker Registry

【編者的話】DockerOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第四篇,介紹了Docker Registry,它是Docker中的重要元件。本文通過情景演繹的方式對其進行了介紹,圖文並茂,強烈推薦讀者閱讀。

Docker系列教程的上一篇文章中,我們討論了Dockerfile的重要性並提供了一系列Dockerfile的命令,使映象的自動構建更加容易。在這篇文章中,我們將介紹Docker的一個重要元件:Docker Registry。它是所有倉庫(包括共有和私有)以及工作流的中央Registry。在深入Docker Registry之前,讓我們先去看看一些常見的術語和與倉庫相關的概念。

  1. Repositories(倉庫)可以被標記為喜歡或者像書籤一樣標記起來
  2. 使用者可以在倉庫下評論。
  3. 私有倉庫和共有倉庫類似,不同之處在於前者不會在搜尋結果中顯示,也沒有訪問它的許可權。只有使用者設定為合作者才能訪問私有倉庫。
  4. 成功推送之後配置webhooks


Docker Registry有三個角色,分別是index、registry和registry client。

角色 1 -- Index 

index 負責並維護有關使用者帳戶、映象的校驗以及公共名稱空間的資訊。它使用以下元件維護這些資訊:

  • Web UI
  • 元資料儲存
  • 認證服務
  • 符號化


這也分解了較長的URL,以方便使用和驗證使用者儲存庫。

角色 2 --Registry

registry是映象和圖表的倉庫。然而,它沒有一個本地資料庫,也不提供使用者的身份認證,由S3、雲檔案和本地檔案系統提供資料庫支援。此外,通過Index Auth service的Token方式進行身份認證。Registries可以有不同的型別。現在讓我們來分析其中的幾種型別:

  1. Sponsor Registry:第三方的registry,供客戶和Docker社群使用。
  2. Mirror Registry:第三方的registry,只讓客戶使用。
  3. Vendor Registry:由釋出Docker映象的供應商提供的registry。
  4. Private Registry:通過設有防火牆和額外的安全層的私有實體提供的registry。


角色 3 --Registry Client
Docker充當registry客戶端來負責維護推送和拉取的任務,以及客戶端的授權。
 

Docker Registry工作流程詳解

現在,讓我們討論五種情景模式,以便更好地理解Docker Registry。

情景A:使用者要獲取並下載映象。所涉及的步驟如下:

  1. 使用者傳送請求到index來下載映象。
  2. index 發出響應,返回三個相關部分資訊:
    • 該映象所處的registry
    • 該映象包括所有層的校驗
    • 以授權為目的的Token > 注意:當請求header裡有X-Docker-Token時才會返回Token。而私人倉庫需要基本的身份驗證,對於公有倉庫這一點不是強制性的。
  3. 使用者通過響應後返回的Token和registry溝通,registry全權負責映象,它用來儲存基本的映象和繼承的層。
  4. registry現在要與index證實該token是被授權的。
  5. index會發送“true” 或者 “false”給registry,由此判定是否允許使用者下載所需要的映象。

 

pull.png



情景B:使用者想要將映象推送到registry中。其中涉及的步驟如下:

  1. 使用者傳送附帶證書的請求到index要求分配庫名。
  2. 在認證成功,名稱空間可用之後,庫名也被分配。index發出響應返回臨時的token。
  3. 映象連帶token,一起被推送到registry中。
  4. registry與index證實token被授權,然後在index驗證之後開始讀取推送流。
  5. 該index由Docker校驗的映象更新。

 

push.png



情景C:使用者想要從index或registry中刪除映象:

  1. index接收來自Docker一個刪除庫的訊號。
  2. 如果index對庫驗證成功,它將刪除該庫,並返回一個臨時的token。
  3. registry現在接收到帶有該token的刪除訊號。
  4. registry與index核實該token,然後刪除庫以及所有與其相關的資訊。
  5. Docker現在通知有關刪除的index,然後index移除庫的所有記錄。

 

delete.png



情景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。