關於登錄、存放庫和成品

本文介紹容器登錄、存放庫、容器映像和相關成品的重要概念。

Registry, repositories, and artifacts

登錄

容器「登錄」是一項服務,可儲存及散發容器映像與相關成品。 Docker Hub 是公用容器登錄的範例,可作為 Docker 容器映像的一般目錄。 Azure Container Registry 可讓使用者直接控制其容器內容、整合式驗證、異地複寫支援網路關閉部署的全域散發和可靠性、具有 Private Link 的虛擬網路設定標籤鎖定和其他許多增強功能。

除了 Docker 相容的容器映像之外,Azure Container Registry 還支援各種內容成品,包括 Helm 圖表和 Open Container Initiative (OCI) 映像格式。

存放庫

「存放庫」是登錄中具有相同名稱但不同標籤之容器映像或其他成品的集合。 例如,下列三個映像位於 acr-helloworld 存放庫中:

  • acr-helloworld:latest
  • acr-helloworld:v1
  • acr-helloworld:v2

存放庫名稱也可以包含命名空間。 命名空間可讓您使用正斜線分隔名稱,以識別組織中的相關存放庫和成品擁有權。 不過,登錄會獨立管理所有存放庫,而不是階層方式。 例如:

  • marketing/campaign10-18/web:v2
  • marketing/campaign10-18/api:v3
  • marketing/campaign10-18/email-sender:v2
  • product-returns/web-submission:20180604
  • product-returns/legacy-integrator:20180715

存放庫名稱只能包含小寫英數位元、句號、連字號、底線和正斜線。

成品

登錄中的容器映像或其他成品會與一個或多個標記相關聯,具有一或多個層次,並由資訊清單識別。 了解這些元件彼此的關聯性,可協助您有效管理登錄。

標籤

映像或其他成品的「標籤」會指定其版本。 存放庫中的單一成品可獲派一或多個標記,也可以「取消標記」。也就是說,您可以刪除映像的所有標記,然而映像的資料 (其層次) 會保留在登錄中。

存放庫 (或存放庫和命名空間) 以及標記可定義映像的名稱。 您可以在推送或提取作業中指定映像名稱,以推送和提取映像。 如果您未在 Docker 命令中提供標籤,則預設會使用 latest 此標籤。

標籤容器映像的方式會由您的案例引導,以開發或部署它們。 例如,建議使用穩定標籤來維護基底映像,以及部署映像的唯一標籤。 如需詳細資訊,請參閱標籤和版本設定容器映像建議

如需標籤命名規則,請參閱 Docker 文件

容器映像和成品是由一或多個「圖層」所組成。 不同的成品類型會以不同方式來定義圖層。 例如,在 Docker 容器映像中,每一層都會對應至 Dockerfile 中定義映像的一行:

Layers of a container image

登錄中的映像會共用常見圖層,以提高儲存效率。 例如,不同存放庫中的數個映像可能會共用相同的 ASP.NET 基底圖層,但是該圖層只有一個複本會儲存在登錄中。 圖層共用也可將圖層發佈至節點最佳化,讓多個成品共用常見圖層。 例如,如果節點上現有的映像包含 ASP.NET 基底圖層作為其基底,則參考同一層的不同映像在後續提取中不會將圖層移轉到節點。 相反地,它會參考已存在於節點上的層次。

為了提供潛在圖層操作的安全隔離和保護,不會跨登錄共用圖層。

Manifest

每個推送至容器登錄的容器映像都會與「資訊清單」建立關聯。 在推送內容時,由登錄所產生的資訊清單,可唯一識別該映像並指定其圖層。

Linux hello-world映射的基本資訊清單看起來如下所示:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 977,
      "digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
    }
  ]
}

您可以使用 Azure CLI 命令 az acr manifest list-metadata 列出存放庫的資訊清單:

az acr manifest list-metadata --name <repositoryName> --registry <acrName>

例如,列出 "acr-helloworld" 存放庫的資訊清單:

az acr manifest list-metadata --name acr-helloworld --registry myregistry
[
  {
    "digest": "sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108",
    "tags": [
      "latest",
      "v3"
    ],
    "timestamp": "2018-07-12T15:52:00.2075864Z"
  },
  {
    "digest": "sha256:3168a21b98836dda7eb7a846b3d735286e09a32b0aa2401773da518e7eba3b57",
    "tags": [
      "v2"
    ],
    "timestamp": "2018-07-12T15:50:53.5372468Z"
  },
  {
    "digest": "sha256:7ca0e0ae50c95155dbb0e380f37d7471e98d2232ed9e31eece9f9fb9078f2728",
    "tags": [
      "v1"
    ],
    "timestamp": "2018-07-11T21:38:35.9170967Z"
  }
]

資訊清單摘要

資訊清單是由唯一的 SHA-256 雜湊或「資訊清單摘要」識別。 每個映像,不論標籤與否,都是由其摘要識別。 即使映像的圖層資料與另一個映像的圖層資料相同完全,摘要值也會是唯一的。 這個機制可讓您重複將標記相同的映像推送至登錄。 例如,您可以將 myimage:latest 重複推送至您的登錄,而不會發生錯誤,因為每個映像都是由其唯一摘要識別。

您可以在推送作業中指定其摘要,以從登錄中提取成碞。 有些系統可能會設定為依照摘要提取,因為這可保證所提取的映像版本,即使標籤相同的映像隨後推送至登錄亦然。

重要

如果您重複推送具有相同標籤且已修改的映像,則您可以建立「孤立」映像 (也就是已取消標籤的成品),但仍會耗用您登錄中的空間。 當您依照標記列出或檢視映像時,已取消標記的映像不會顯示在 Azure CLI 或 Azure 入口網站中。 不過,其層次仍然存在,而且會耗用您登錄中的空間。 當資訊清單是唯一的登錄空間或是最後一個指向特定圖層的資訊清單時,刪除未標籤的映像會釋放登錄空間。 如需釋放未標籤映像所用空間的資訊,請參閱刪除 Azure Container Registry 中的容器映像

定址成品

若要使用 Docker 或其他用戶端工具來處理推送和提取作業的登錄成品,請結合完整的登錄名稱、存放庫名稱 (如果適用,請包括命名空間路徑),以及成品標籤或資訊清單摘要。 如需這些字詞的說明,請參閱上一節。

依標籤定址[loginServerUrl]/[repository][:tag]

依摘要定址[loginServerUrl]/[repository@sha256][:digest]

使用 Docker 或其他用戶端工具來提取或推送成品至 Azure 容器登錄時,請使用登錄的完整 URL,也稱為「登入伺服器」名稱。 在 Azure 雲端中,Azure 容器登錄的完整 URL 格式為myregistry.azurecr.io (全部小寫)。

注意

  • 您無法在登錄登入伺服器 URL 中指定連接埠號碼,例如myregistry.azurecr.io:443
  • 如果您未在 Docker 命令中提供標籤,則預設會使用 latest此標籤。

依標籤推送

範例:

docker push myregistry.azurecr.io/samples/myimage:20210106

docker push myregistry.azurecr.io/marketing/email-sender

依標籤提取

範例:

docker pull myregistry.azurecr.io/marketing/campaign10-18/email-sender:v2

依資訊清單摘要提取

範例:

docker pull myregistry.azurecr.io/acr-helloworld@sha256:0a2e01852872580b2c2fea9380ff8d7b637d3928783c55beb3f21a6e58d5d108

下一步

了解 Azure Container Registry 中登錄儲存體支援的內容格式

了解如何使用 Azure Container Registry 來推送和提取映像