使用 Azure Container Registry 管理公用內容。

本文概述使用 Azure Container Registry 之類的本機登錄來維護公用內容副本的做法和工作流程,例如 Docker Hub 中的容器映像。

公開內容的風險

您的環境可能會相依於公用內容,例如公用容器映像、Helm 圖表開啟原則代理程式 (OPA) 原則或其他成品。 例如,您可以透過直接從 Docker Hub 或其他公用登錄提取映像,以執行 nginx 進行服務路由傳送或 docker build FROM alpine

如果沒有適當的控制,對公用登錄內容具有相依性時,可能會對映像開發和部署工作流程造成風險。 若要降低此風險,請在可能時保留公用內容的本機副本。 如需詳細資訊,請參閱 Open Container Initiative 部落格

使用 Docker Hub 進行驗證

第一個步驟是,如果您目前從 Docker Hub 提取公用映像作為組建或部署工作流程的一部分,我們建議您使用 Docker Hub 帳戶進行驗證,而不是提出匿名提取要求。

提出頻繁的匿名提取要求時,您可能會看到類似 ERROR: toomanyrequests: Too Many Requests.You have reached your pull rate limit. 的 Docker 錯誤,請驗證至 Docker Hub 以避免這些錯誤。

注意

自 2020 年 11 月 2 日起,下載速率限制適用於從 Docker 免費方案帳戶對 Docker Hub 進行匿名和已驗證的要求,並由 IP 位址與 Docker 識別碼個別強制執行。

估計提取要求數目時,請考慮到使用雲端提供者服務或在公司 NAT 後方工作時,多個使用者會以 IP 位址子集的匯總形式顯示在 Docker Hub 中。 將 Docker 付費帳戶驗證新增至對 Docker Hub 提出的要求,將可避免因速率限制節流而造成潛在的服務中斷。

如需詳細資料,請參閱 Docker 定價和訂用帳戶以及 Docker 服務條款

Docker Hub 存取權杖

Docker Hub 在驗證至 Docker Hub 時,支援個人存取權杖作為 Docker 密碼的替代方案。 建議針對從 Docker Hub 提取映像的自動化服務使用權杖。 您可以為不同的使用者或服務產生多個權杖,並在不再需要時撤銷權杖。

若要使用權杖向 docker login 進行驗證,請省略命令列上的密碼。 出現輸入密碼提示時,請改為輸入權杖。 如果您為 Docker Hub 帳戶啟用雙因素驗證,則必須在從 Docker CLI 登入時使用個人存取權杖。

從 Azure 服務進行驗證

數個 Azure 服務,包括 App Service 和 Azure 容器執行個體支援從公用登錄提取映像,例如容器部署的 Docker Hub。 如果您需要從 Docker Hub 部署映像,我們建議您進行設定以使用 Docker Hub 帳戶進行驗證。 範例:

應用程式服務

  • 映像來源:Docker Hub
  • 存放庫存取:私人
  • 登入:<Docker Hub 使用者名稱>
  • 密碼:<Docker Hub 權杖>

如需詳細資料,請參閱 App Service 上的 Docker Hub 已驗證提取

Azure 容器執行個體

  • 映像來源:Docker Hub 或其他登錄
  • 映像類型:私人
  • 映像登錄登入伺服器:docker.io
  • 映像登錄使用者名稱:<Docker Hub 使用者名稱>
  • 映像登錄密碼:<Docker Hub 權杖>
  • 映像:docker.io/<repo name>:<tag>

設定成品快取以取用公用內容

使用公用內容的最佳做法是結合登錄驗證和成品快取功能。 您可以使用成品快取,將容器成品快取到 Azure Container Registry,即使在專用網中也是如此。 使用成品快取不僅能保護您的登錄速率限制,而且在結合異地複寫的 ACR 時大幅提高提取可靠性,以從最接近您 Azure 資源的區域提取成品。 此外,您也可以使用 ACR 必須提供的所有安全性功能,包括專用網、防火牆設定、服務主體等。 如需搭配 ACR 成品快取使用公用內容的完整資訊,請參閱 成品快取 教學課程。

將映像匯入至 Azure Container Registry

若要開始管理公用映像的副本,如果您還沒有 Azure 容器登錄,則可以建立 Azure 容器登錄。 使用 Azure CLIAzure 入口網站Azure PowerShell 或其他工具建立登錄。

建議的一次性步驟是將基礎映像和其他公用內容匯入至您的 Azure Container Registry。 Azure CLI 中的 az acr import 命令支援從公用登錄匯入映像,例如 Docker Hub 和 Microsoft Container Registry 以及其他私人容器登錄。

az acr import 不需要本機 Docker 安裝。 您可以使用 Azure CLI 的本機安裝或直接在 Azure Cloud Shell 中執行。 其支援任何 OS 類型、多架構映像或 Helm 圖表等 OCI 成品的映像。

視組織的需求而定,您可以匯入至專用登錄或共用登錄中的存放庫。

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest \
  --username <Docker Hub username> \
  --password <Docker Hub token>

更新映像參考

應用程式映像的開發人員應該確保其程式碼會在其控制項下參考本機內容。

  • 更新映像參考以使用私人登錄。 例如,將 Dockerfile 中的 FROM baseimage:v1 陳述式更新為 FROM myregistry.azurecr.io/mybaseimage:v1
  • 設定認證或驗證機制以使用私人登錄。 確切的機制取決於您用來存取登錄的工具,以及您管理使用者存取的方式。
    • 如果您使用 Kubernetes 叢集或 Azure Kubernetes Service 來存取登錄,請參閱驗證案例
    • 深入了解向 Azure Container Registry 進行驗證的選項

自動化應用程式映像更新

展開映像匯入,並設定 Azure Container Registry 工作,以在更新基礎映像時自動化應用程式映像建置。 自動化建置工作可以追蹤基礎映像更新原始程式碼更新

如需詳細範例,請參閱如何使用 Azure Container Registry 工作來取用和維護公用內容

注意

單一預先設定的工作可以自動重建參考相依基礎映像的每個應用程式映像。

下一步