天天看點

基于OSS搭建私有 Docker Registry基于OSS搭建私有 Docker Registry阿裡雲容器Hub服務的優勢

docker registry 作為 docker 的核心元件之一負責了鏡像的存儲以及分發。使用者隻需要使用 docker 的用戶端就可以直接和 registry 進行互動,下載下傳和上傳鏡像。最初版本的 registry 由 python 實作。由于設計初期在安全性,性能以及 api 的設計上有着諸多的缺陷,該版本在 0.9 之後停止了開發。新的項目由 go 語言開發,所有的api,底層存儲方式,系統架構都進行了全面的重新設計已解決上一代 registry 中存在的問題。

安裝 docker engine

安裝 docker compose

配置加速器,下載下傳 registry 鏡像

為 registry 相關的配置建立一個單獨的目錄

在目前目錄下建立我們的賬戶密碼(最簡單的賬戶驗證方式)

在目前目錄下建立我們的容器編排檔案 docker-compose.yml

注意這個檔案中的一些oss相關的資訊,例如ak、bucket,需要使用者根據自己的情況填寫。

ecs部署通過内網通路oss,請配置registry_storage_oss_internal環境變量。

如果預設域名不正确,請使用registry_storage_oss_endpoint環境變量。

啟動 registry

如果啟動成功會看到控制台列印出容器監聽5000端口的資訊

服務端測試

保持着這個終端,我們可以随時看到registry運作時的日志資訊,我們另開一個終端測試。

我們測試的步驟是,建立一個新的鏡像,然後登陸registry,最後上傳。

我們可以登陸 oss 的控制台,看看bucket裡面是否有新增的内容。

用戶端測試

首先在用戶端,我們就需要通過伺服器ip來通路我們的registry了。

但是我們在登陸的時候肯定會遇到以下問題

根據提示,我們需要把 <code>--insecure-registry xxx.xxx.xxx.xxx</code> 加到docker deamon的啟動參數中。重新開機deamon之後,我們再嘗試一下登陸和鏡像的推送就應該沒有問題了。

包含證書的新配置檔案

如果不希望出現這個報錯的話,使用者需要為自己的私有registry購買一個獨立的域名,并且購買域名的https證書。然後就可以通過在服務端配置證書,配置舉例如下。

既然已經使用https的證書了,我們對外暴露的端口換成 443 端口。

将本地的證書目錄也一并挂載到容器裡面去。

添加了四個關于證書通路的配置,registry_http_secret 是随機的加密串。registry_http_tls_key、registry_http_tls_certificate 是證書和秘鑰。

最後在展示一下示例中的檔案結構:

阿裡雲的容器hub服務則在鏡像的存儲與分發的基礎之上,提供了大量額外的服務。不管是在服務的穩定性還是可用性上,都能有一個更為可靠的保證。并且可以和更多的服務串聯起來,為應用生命周期全流程的自動化提供了基礎。

docker registry 的功能是鏡像的存儲和分發,并沒有鏡像的管理功能。是以當我們搭建了一個私有 registry 之後,鏡像的元資訊管理是缺失的。這就意味着我們并不知道我們的 registry 中有什麼鏡像,我們必須開發一個應用來管理鏡像的元資訊。

容器hub服務擁有鏡像元資訊的管理功能。通過控制台可以輕松的查詢到你擁有的倉庫,倉庫中存在的各個版本的鏡像以及鏡像的推送時間等資訊。

在上面搭建registry的例子中,我們的賬戶資訊是存儲在一個檔案中的,這僅僅是賬戶管理的最簡單的方式。使用這種方式管理使用者賬戶的話,需要手動維護賬戶資訊的檔案。如果需要更為靈活的賬戶管理服務,使用者需要再自己部署一個auth服務,并且配置到registry中,通過實作鑒權的約定接口為使用者賬戶資訊進行管理。

容器hub服務部署了自己的auth服務,對所有使用者的賬戶資訊進行管理,同時對每個賬戶的權限進行管理。并且允許使用者對自己的鏡像或倉庫做出授權操作,授權其他使用者下載下傳或是更新自己的鏡像或倉庫。完善的賬戶管理功能可以規避掉因為賬戶管理不善導緻的資訊安全問題。

鏡像的建構也是一件費時費力的事情,而且在國内建構更是。建構鏡像時,我們經常會使用到一些國外軟體源,緩慢的下載下傳速度極大的影響了開發的效率。甚至建構難以成功。

容器hub服務針對這個問題,提供了鏡像建構服務。使用者可以針對鏡像的特性,選擇國外建構環境進行建構,建構完成之後,建構服務會将鏡像推送回倉庫。使用者隻需要在建立倉庫時,綁定指定的代碼源位址就可以了。作為開發自動化的一部分,使用者還可以開啟自動建構功能,容器hub服務會接收源代碼倉庫的回調資訊,在開發者推送新的代碼之後,自動進行建構完成鏡像上傳。

作為開發自動化的另一環,在使用者鏡像更新之後,可能需要進行測試、部署等動作。容器hub服務提供了webhook鈎子,用于鏡像更新之後的流程觸發。例如現在的一個典型場景就是,鏡像更新之後,容器hub服務主動觸發容器服務的openapi接口,更新部署的鏡像并重新開機。

對系統整體的監控報警保證了容器hub服務的可用性,免去了普通使用者對 registry 運維上的成本。

<a href="https://cr.console.aliyun.com">容器hub服務 控制台</a>

<a href="https://github.com/docker/distribution/blob/master/docs/configuration.md">docker registry 配置參考文檔</a>

<a href="https://yq.aliyun.com/articles/7695">docker engine 鏡像源站</a>

<a href="https://yq.aliyun.com/articles/7697">docker toolbox 鏡像源站</a>

<a href="https://yq.aliyun.com/articles/29941">docker 鏡像加速器</a>

繼續閱讀