Flux7 Docker 系列教程(四):Registry & Workflows

本系列教程翻譯自 Flux7 Docker Tutorial Series,系列共有九篇,本文譯自第四篇 Part 4: Registry & Workflows
該系列全部文章將參考其餘學習資料翻譯,也會加入本身的學習做爲部分註解。若有錯誤,歡迎指正。web

clipboard.png

上篇文章介紹了使用 Dockerfile 進行自動化部署和 Dockerfile 的經常使用命令,本篇文章來探討 Docker Registry。相似 GitHub,Docker Registry 是用來存儲 Docker 鏡像的地方。瞭解 Docker Registry 以前先來了解幾個相關的知識吧。docker

  1. 鏡像和倉庫和 GitHub 同樣,能夠被收藏和被 「star」。
  2. 和 GitHub 同樣,能夠在倉庫上面留評論以便和維護人員進行交流。
  3. 和 Github 相似私人倉庫不能被搜索到,只有擁有合做者、擁有者權限的用戶才能訪問。
  4. 推送成功以後能夠配置 webhook

Docker Registry 由三個部分組成:Index、Registry、Registry Client。數據庫

能夠把 Index 認爲是負責登陸、負責認證、負責存儲鏡像信息和負責對外顯示的外部實現,而 Registry 則是負責存儲鏡像的內部實現,而 Registry Client 則是 Docker 客戶端。安全

Docker Hub 架構

Docker Index

Docker Index 使用如下工具來維護用戶信息、校驗鏡像、以及維護公共 namespace:網絡

  1. 網頁界面
  2. 元數據存儲
  3. 認證服務
  4. 令牌化

同時 Docker Index 也用來分解 URL,方便用戶認證和用戶使用。架構

Registry

Registry 用來存儲鏡像和統計數據。然而它不會提供數據庫服務,即它不會提供用戶認證服務,由 S三、雲文件和本地文件系統提供數據庫支持。另外,由 Index 經過 Token 進行用戶認證。有多種不一樣的 Registry,下面是其中幾個的例子:負載均衡

  1. Sponsor Registry 第三方 Registry,爲客戶和 Docker 社區提供服務。
  2. Mirror Registry 第三方 Registry,只爲客戶提供服務。
  3. Vendor Registry 由發佈 Docker 鏡像的供應商提供的 Registry。
  4. Private Registry 經過多重安全檢查進行認證的私有 Registry。

Registry Client

用於進行 pull 和 push 的操做,同時用於 docker push 時的登陸認證。工具

爲了更好地理解 Registry Client 的工做流程,下面將詳細描述一下五個案例中的 Docker Registry 工做流程。學習

情景 A:從官方倉庫 Pull 鏡像

  1. 用戶對 Index 發出下載請求
  2. Index 返回如下三個部分的信息:

    • 鏡像所在的 Registry。
    • 鏡像全部的層的校驗
    • 認證以後的 Token
  3. 用戶使用 Token 和 Registry 進行通訊,Registry 負責存儲鏡像和疊加在鏡像上面的改動層。
  4. Registry 確認是不是 Index 所發出的的 Token。
  5. Index 返回確認值,由此判斷用戶是否能夠下載鏡像。
    >只有在請求的 header 裏有 X-Docker-Token 時纔會返回 Token。私有倉庫須要認證,而公有倉庫不須要認證。

clipboard.png

情景 B:Push 鏡像到 Registry

  1. 用戶向 Index 發送憑證,並要求分配 repository 名稱。
  2. 認證 namespace 的可用性後,分配 repository 名稱,同時 Index 返回一個臨時 Token。
  3. 向 Registry 發送 Token 和鏡像。
  4. Registry 向 Index 確認 Token,確認完畢以後讀取推送流。
  5. Index 更新相關的鏡像信息。

clipboard.png

情景 C:從 Index 和 Registry 刪除一個鏡像

  1. Index 收到 delete 某個 repository 的請求。
  2. 進行 repository 認證和用戶認證,成功後 Index 給客戶端返回一個臨時 Token。
  3. Registry 收到刪除信號和 Token。
  4. Registry 向 Index 驗證 Token,而後刪除對應的鏡像文件。
  5. Registry 通知 Index 已經刪除,Index 刪除數據庫中的全部相關的 repository 記錄。

clipboard.png

情景 D:在沒有 Index 的狀況下使用 Registry

沒有 Index 的 Registry 是徹底受 Docker Clinet 控制的。這種模式最適合在私有網絡中存儲鏡像文件。Registry 運行在一個和 Index 沒有通訊的環境中,全部的認證問題和安全問題都須要用戶本身解決。ui

情景 E:在有 Index 的獨立模式中使用 Registry

在這種狀況下,用戶須要本身架設一個 Index 去解決存儲和認證問題。固然,這種狀況下可能會出現和官方 Index 時間不一樣步的問題。Docker 官方也提供了一個很是有意思的東西叫作 chaining registries,主要是爲了解決負載均衡和爲具體請求指定具體的 Registry。
固然,咱們能夠參考 本身搭建本地 Docker Hub 服務 來搭建本地的 Docker Hub。。

接下來的文章中將會繼續介紹如何在以上每一個場景中使用 Docker Registry API,而且也會深刻了解 Docker 安全。

相關文章
相關標籤/搜索