# Docker入門教程(四)Docker Registry
> 【編者的話】DockerOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第四篇,介紹了Docker Registry,它是Docker中的重要組件。本文通過情景演繹的方式對其進行了介紹,圖文并茂,強烈推薦讀者閱讀。
在[Docker系列教程的上一篇文章](http://dockerone.com/article/103)中,我們討論了Dockerfile的重要性并提供了一系列Dockerfile的命令,使鏡像的自動構建更加容易。在這篇文章中,我們將介紹Docker的一個重要組件:Docker Registry。它是所有倉庫(包括共有和私有)以及工作流的中央Registry。在深入Docker Registry之前,讓我們先去看看一些常見的術語和與倉庫相關的概念。
1. Repositories(倉庫)可以被標記為喜歡或者像書簽一樣標記起來
2. 用戶可以在倉庫下評論。
3. 私有倉庫和共有倉庫類似,不同之處在于前者不會在搜索結果中顯示,也沒有訪問它的權限。只有用戶設置為合作者才能訪問私有倉庫。
4. 成功推送之后配置[webhooks](http://www.wikiwand.com/en/Webhook)。
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,由此判定是否允許用戶下載所需要的鏡像。

情景B:用戶想要將鏡像推送到registry中。其中涉及的步驟如下:
1. 用戶發送附帶證書的請求到index要求分配庫名。
2. 在認證成功,命名空間可用之后,庫名也被分配。index發出響應返回臨時的token。
3. 鏡像連帶token,一起被推送到registry中。
4. registry與index證實token被授權,然后在index驗證之后開始讀取推送流。
5. 該index由Docker校驗的鏡像更新。

情景C:用戶想要從index或registry中刪除鏡像:
1. index接收來自Docker一個刪除庫的信號。
2. 如果index對庫驗證成功,它將刪除該庫,并返回一個臨時的token。
3. registry現在接收到帶有該token的刪除信號。
4. registry與index核實該token,然后刪除庫以及所有與其相關的信息。
5. 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。
> 出處:http://dockone.io/article/104
> 原文鏈接:[Part 4: Registry & Workflows](http://flux7.com/blogs/docker/docker-tutorial-series-part-4-registry-workflows/)
>(翻譯:[田浩浩](https://github.com/llitfkitfk)?審校:李穎杰)