Azure Container Registry 的最佳做法

遵循這些最佳做法,即可協助發揮最大效能,以及透過符合成本效益的方式在 Azure 中使用您的私人登錄來儲存與部署容器映像和其他成品。

如需登錄概念的背景,請參閱關於登錄、存放庫和映像。 關於登錄之中標籤和版本映像的策略,另請參閱標籤和版本設定容器映像的建議

網路鄰近部署

在您部署容器的相同 Azure 區域中建立容器登錄。 將登錄放在於網路上鄰近您容器主機的區域有助於降低延遲和成本。

網路鄰近部署是使用私人容器登錄的主要原因之一。 Docker 映像擁有一個有效的分層建構,可允許您進行增量部署。 不過,新節點必須提取指定之映象所需的所有層級。 這個初始的 docker pull 可快速加總達數 GB。 讓私人登錄鄰近您的部署可將網路延遲降到最低。 此外,所有公用雲端 (包括 Azure) 都實作網路輸出費用。 將映像從一個資料中心提取到另一個資料中心除了增添延遲之外,也會增添網路輸出費用。

異地複寫多區域部署

如果您要將容器部署到多個區域,請使用 Azure Container Registry 的異地複寫功能。 不論您是要從區域資料中心為全球客戶提供服務,還是您的開發小組位於不同位置,您都可以藉由異地複寫登錄來簡化登錄管理並將延遲降到最低。 您也可以設定區域 Webhook 來通知您特定複本中的事件,例如推送映像時。

進階註冊可以使用異地複寫。 若要了解如何使用異地複寫,請參閱由三部分組成的教學課程 Azure Container Registry 中的異地複寫

最大化提取效能

除了將映像放在您的部署附近之外,映像本身的特性也會影響提取效能。

  • 映像大小 - 移除不必要的圖層或減少圖層大小,以將映像的大小減到最小。 減少映像大小的其中一種方法是使用多階段 Docker 建置方式,僅包括必要的執行階段元件。

    同時檢查您的映像是否可以包括較輕型的基礎 OS 映像。 如果您使用部署環境 (例如可快取特定基礎映像的Azure 容器執行個體),則請檢查您是否可以交換其中一個已快取映像的映像層。

  • 圖層數目 - 平衡使用的圖層數目。 如果太少,則您無法受益於主機上的圖層重複使用和快取。 太多,而您的部署環境會花更多時間來提取和解壓縮。 五到十層最佳。

也請選擇符合效能需求的 Azure Container Registry 服務層。 當您有大量部署時,進階層可提供最大頻寬和最高速率的並行讀取和寫入作業。

儲存機制命名空間

您可以使用存放庫命名空間,來允許跨組織的多個群組來共用單一登錄。 登錄可以在各個部署與小組之間共用。 Azure Container Registry 支援巢狀命名空間,可讓您進行群組隔離。 不過,登錄會獨立管理所有存放庫,而不是階層方式。

例如,請思考一下下列容器映像標記。 全公司使用的映象 (例如 aspnetcore) 會放在根命名空間中,而「生產」及「行銷」群組所擁有的容器映像則會各自使用自己的命名空間。

  • contoso.azurecr.io/aspnetcore:2.0
  • contoso.azurecr.io/products/widget/web:1
  • contoso.azurecr.io/products/bettermousetrap/refundapi:12.3
  • contoso.azurecr.io/marketing/2017-fall/concertpromotions/campaign:218.42

專用資源群組

由於容器登錄是跨多個容器主機使用的資源,因此登錄應該位於自己的資源群組中。

雖然您可以對特定主機類型 (例如 Azure 容器執行個體) 進行實驗,但完成後,您可能會想要刪除該容器執行個體。 不過,您也可能會想要保留已推送到 Azure Container Registry 的映像集合。 藉由將登錄放在它自己的資源群組中,即可將刪除容器執行個體資源群組時意外刪除該登錄中映像集合的風險降到最低。

驗證和授權

向 Azure Container Registry 進行驗證時,有兩種主要的案例:個人驗證和服務 (或「遠端控制」) 驗證。 下表提供這些案例的簡要概觀,以及各個案例的建議驗證方法。

類型 範例案例 建議的方法
個人身分識別 將映像提取至其開發電腦或從該電腦提取映像的開發人員。 az acr login
遠端控制/服務身分識別 未直接涉及使用者的組建和部署管線。 服務主體

如需這些和其他 Azure Container Registry 驗證案例的深入資訊,請參閱向 Azure Container Registry 進行驗證

Azure Container Registry 支援組織中的安全性做法,以將職責和權限分散至不同的身分識別。 使用角色型存取控制,將適當的權限指派給執行不同登錄作業的不同使用者、服務主體或其他身分識別。 例如,將推送權限指派給建置管線中所使用的服務主體,並將提取權限指派給用於部署的不同身分識別。 建立權杖,以更精細、有時間限制地存取特定存放庫。

管理登錄大小

每個容器登錄服務層的儲存體條件約束都要符合典型案例:[基本] 適用於開始使用、[標準] 大部分的實際執行應用程式,而 [進階] 適用於大規模效能和異地複寫。 在整個登錄生命週期,您應該定期刪除未使用的內容來管理其大小。

使用 Azure CLI 命令 az acr show-usage 來顯示登錄中儲存體和其他資源的目前耗用量:

az acr show-usage --resource-group myResourceGroup --name myregistry --output table

範例輸出:

NAME                        LIMIT         CURRENT VALUE    UNIT
--------------------------  ------------  ---------------  ------
Size                        536870912000  215629144        Bytes
Webhooks                    500           1                Count
Geo-replications            -1            3                Count
IPRules                     100           1                Count
VNetRules                   100           0                Count
PrivateEndpointConnections  10            0                Count

您也可以在 Azure 入口網站中,於登錄的 [概觀] 中找到目前儲存體使用量:

Registry usage information in the Azure portal

注意

異地複寫登錄中,會針對主區域顯示儲存體使用量。 乘上所耗用登錄儲存體總數的複寫數目。

刪除映像資料

Azure Container Registry 支援數種方法供您從容器登錄中刪除映像資料。 您可以依標籤或資訊清單摘要來刪除映像,也可以刪除整個存放庫。

如需如何從登錄中刪除映像資料的詳細資訊,包括未標記 (有時稱為「懸空」或「孤立」) 的映像,請參閱刪除 Azure Container Registry 中的容器映像。 您也能針對未標記的資訊清單設定保留原則

下一步

在數個提供不同功能的階層 (也稱為 SKU) 中都提供 Azure Container Registry。 如需可用服務層級的詳細資訊,請參閱 Azure Container Registry 服務層

如需改善容器登錄安全性狀態的建議,請參閱適用於 Azure Container Registry 的 Azure 安全性基準