Docker入門教程(四)Docker Registry
【編者的話】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
負責並維護有關使用者帳戶、映象的校驗以及公共名稱空間的資訊。它使用以下元件維護這些資訊:
- Web UI
- 元資料儲存
- 認證服務
- 符號化
這也分解了較長的URL,以方便使用和驗證使用者儲存庫。
角色 2 --Registryregistry
是映象和圖表的倉庫。然而,它沒有一個本地資料庫,也不提供使用者的身份認證,由S3、雲檔案和本地檔案系統提供資料庫支援。此外,通過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。