如果您使用 Container Registry 管理容器映像檔,本頁說明如何設定 pkg.dev
Artifact Registry 存放區,以及使用存放區與使用 Container Registry 的差異。
以下操作說明主要適用於存放區管理員。如要瞭解映像檔的建構、推送、提取和部署方式有哪些異動,請參閱下列資訊:
事前準備
從Google Cloud 控制台啟用 Artifact Registry API,或使用下列指令:
gcloud services enable artifactregistry.googleapis.com
如果尚未安裝 gcloud CLI,請執行這個動作。如果是現有安裝項目,請執行下列指令,將元件更新至最新版本:
gcloud components update
開始遷移前,請先瞭解 Artifact Registry 的定價。
必要的角色
如要取得設定 gcr.io 存放區所需的權限,請要求管理員在 Google Cloud 專案中授予您下列 IAM 角色:
-
如要建立 Artifact Registry 存放區並授予個別存放區的存取權:
Artifact Registry 管理員 (
roles/artifactregistry.admin
) -
如要查看及管理套用至 Cloud Storage 儲存空間 bucket 的現有 Container Registry 設定:
Storage Admin (
roles/storage.admin
) -
如要在專案層級授予存放區存取權,請使用專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
) 或包含同等權限的角色,例如資料夾管理員 (roles/resourcemanager.folderAdmin
) 或機構管理員 (roles/resourcemanager.organizationAdmin
)。
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
總覽
pkg.dev
存放區是支援所有功能的 Artifact Registry 一般存放區。
為求簡潔,本頁的操作說明假設 Container Registry 和 Artifact Registry 位於同一個 Google Cloud 專案。在遷移至 Artifact Registry 的過程中,您可以繼續使用這兩項服務,逐步完成設定步驟並更新自動化作業。如有需要,您可以在另一個專案中設定 Artifact Registry,並執行相同的整體步驟。
Artifact Registry 也提供 gcr.io 存放區。
這些存放區可將現有登錄檔的 gcr.io
流量重新導向至對應的 Artifact Registry 存放區。這些功能可提供部分 Container Registry 回溯相容性,但也有一些限制。不過,如果您有大量工具設定、指令碼或含有 gcr.io
參照的程式碼,可能需要採取更具策略性的做法,才能轉移至 Artifact Registry。請參閱支援 gcr.io 網域的存放區轉換說明文件,協助您做出適當的決定。
轉換步驟
本指南將說明如何完成下列步驟:
- 為容器建立 Docker 存放區。您必須先建立存放區,才能向存放區推送映像檔。
- 授予存放區權限。
- 設定驗證,以便連線至新存放區。
- 如有需要,請從 Container Registry 複製映像檔,以便在新存放區中使用。
- 請嘗試推送及提取容器。
- 請嘗試將映像檔部署至執行階段環境。
- 設定其他功能。
- 轉換完成後,清除 Container Registry 中的映像檔。
建立存放區
如果您先前未曾將映像檔推送至多區域,Container Registry 會自動在多區域建立儲存空間值區。
在 Artifact Registry 中,您必須先建立存放區,才能上傳映像檔。建立存放區時,您必須指定:
- 存放區格式。 Artifact Registry 會將容器儲存在 Docker 存放區中。
存放區的單一區域或多區域位置。
為 Artifact Registry 存放區選擇位置時,請考量存放區與其他基礎架構和使用者的距離。如果您打算將 Container Registry 中的映像檔複製到 Artifact Registry,位置差異可能會影響複製費用。
如果您使用客戶自行管理的加密金鑰 (CMEK) 進行加密,則需要 Cloud Key Management Service 金鑰。
在 Container Registry 中,您可將 Container Registry 儲存空間 bucket 設定為使用 CMEK。在 Artifact Registry 中,您可以在建立存放區時,將其設為使用 CMEK。如要進一步瞭解如何在 Artifact Registry 中使用 CMEK,請參閱「啟用客戶自行管理的加密金鑰」。
Container Registry 會在 gcr.io
網域上託管容器。
Artifact Registry 會在 pkg.dev
網域上託管容器。
如要瞭解如何建立存放區 (包括使用 CMEK 加密的存放區),請參閱「建立存放區」。
授予權限
Container Registry 使用 Cloud Storage 角色控管存取權。Artifact Registry 有自己的 IAM 角色,這些角色比 Container Registry 更清楚地劃分讀取、寫入和存放區管理角色。
如要快速將儲存空間 bucket 上現有的權限對應至建議的 Artifact Registry 角色,請使用角色對應工具。
或者,您也可以使用 Google Cloud 控制台,查看有權存取儲存空間值區的主體清單。
- 在 Google Cloud 控制台,前往「Cloud Storage bucket」頁面。
按一下要查看的登錄主機儲存空間 bucket。 在 bucket 名稱中,
PROJECT-ID
是您的 Google Cloud 專案 ID。- gcr.io:
artifacts.PROJECT-ID.appspot.com
- asia.gcr.io:
asia.artifacts.PROJECT-ID.appspot.com
- eu.gcr.io:
eu.artifacts.PROJECT-ID.appspot.com
- us.gcr.io:
us.artifacts.PROJECT-ID.appspot.com
- gcr.io:
按一下「Permissions」(權限) 分頁標籤。
在「權限」分頁中,按一下「依角色檢視」子分頁。
展開角色,查看具備該角色的主體。
這份清單包含直接在 bucket 上授予的 IAM 角色,以及從父項專案繼承的角色。您可以根據角色選擇要授予的 Artifact Registry 角色。
- Cloud Storage 和基本角色
授予目前存取 Container Registry 的使用者和服務帳戶 Artifact Registry 存放區的存取權。如要瞭解從上層專案繼承的 Cloud Storage 角色,請確認主體目前是否使用 Container Registry。部分主體可能只會存取與 Container Registry 無關的其他 Cloud Storage 值區。
在 IAM 推出前就存在的「擁有者」、「編輯者」和「檢視者」基本角色,對儲存空間 buckets 的存取權有限。這些角色並不會自動授予名稱所指的 Cloud Storage 資源存取權,而是為其他 Google Cloud 服務提供額外權限。確認哪些使用者和服務帳戶需要存取 Artifact Registry,並使用角色對應表,協助您授予適當的角色 (如果存取 Artifact Registry 是適當做法)。
下表根據預先定義的 Cloud Storage 角色授予的權限,對應 Artifact Registry 角色,以供 Container Registry 存取。Artifact Registry 角色提供一些額外的權限區隔,預先定義的 Cloud Storage 角色則不提供這類區隔。
必要存取權 目前的角色 Artifact Registry 角色 授予角色的位置 僅提取圖片 (唯讀) Storage 物件檢視者
(roles/storage.objectViewer
)Artifact Registry Reader
(roles/artifactregistry.reader)
Artifact Registry 存放區或 Google Cloud 專案 推送及提取映像檔 (讀取和寫入) Storage 舊版值區寫入者
(roles/storage.legacyBucketWriter
)Artifact Registry Writer
(roles/artifactregistry.writer)
Artifact Registry 存放區或 Google Cloud 專案 推送、提取及刪除映像檔 Storage 舊版值區寫入者
(roles/storage.legacyBucketWriter
)Artifact Registry 存放區管理員
(roles/artifactregistry.repoAdmin)
Artifact Registry 存放區或 Google Cloud 專案 建立、管理及刪除存放區 Storage 管理員
(roles/storage.admin
)Artifact Registry 管理員
(roles/artifactregistry.admin)
Google Cloud 專案 - 從專案繼承的服務代理角色
Google Cloud 服務的預設服務帳戶在專案層級擁有自己的角色。舉例來說,Cloud Run 的服務代理人具有 Cloud Run 服務代理人角色。
在大多數情況下,這些服務代理角色包含 Container Registry 和 Artifact Registry 的同等預設權限,如果您在與現有 Container Registry 服務相同的專案中執行 Artifact Registry,則不需要進行任何額外變更。
如要進一步瞭解服務代理角色中的權限,請參閱服務代理角色參考資料。
- 自訂角色
根據使用者或服務帳戶需要的存取權層級,使用角色對應表決定要授予的角色。
如需授予 Artifact Registry 角色的操作說明,請參閱設定角色和權限。
向存放區進行驗證
Artifact Registry 支援與 Container Registry 相同的驗證方法。
如果您使用 Docker 憑證輔助程式:
- 您必須使用 2.0 以上版本,才能與 Artifact Registry 存放區互動。您可以在 GitHub 取得獨立版本。
- 您必須使用要使用的 Artifact Registry 位置資訊設定憑證輔助程式。根據預設,憑證輔助程式只會設定 Container Registry 主機的存取權。
如要進一步瞭解如何設定驗證,請參閱「為 Docker 設定驗證機制」。
從 Container Registry 複製容器
如果 Container Registry 中有您想繼續在 Artifact Registry 中使用的容器,可以透過幾種方式複製。如需詳細操作說明,請參閱從 Container Registry 複製映像檔
推送及提取映像檔
您在 Artifact Registry 中標記、推送及提取映像檔時使用的 Docker 指令,與在 Container Registry 中使用的指令類似。主要有以下兩項差異:
- Artifact Registry Docker 存放區的主機名稱包含位置前置字元,後接
-docker.pkg.dev
。例如australia-southeast1-docker.pkg.dev
、europe-north1-docker.pkg.dev
和europe-docker.pkg.dev
。 - 由於 Artifact Registry 支援單一專案中的多個 Docker 存放區,因此您必須在指令中指定存放區名稱。
舉例來說,在 Container Registry 中,這項指令會將映像檔 my-image
推送至專案 my-project
中的登錄檔 eu.gcr.io
。
docker push eu.gcr.io/my-project/my-image
在 Artifact Registry 中,這個指令會將映像檔 my-image
推送至存放區 my-repo
和專案 my-project
中的區域存放區 europe-north1-docker.pkg.dev
。
docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image
如要進一步瞭解如何在 Artifact Registry 中推送及提取映像檔,請參閱推送及提取映像檔。
部署映像檔
常見整合的服務帳戶會設定相同專案中存放區的預設 Google Cloud 權限。
使用 Cloud Build 建構映像檔並推送至存放區,通常與 Container Registry 的做法相同。Artifact Registry 的主要差異在於,您必須先建立目標存放區,才能將映像檔推送至該存放區,包括您推送的第一個映像檔。
請務必先建立所需存放區,再執行推送映像檔的指令,包括 Docker 指令 docker push
和 Cloud Build 指令 gcloud builds submit
。
Cloud Build 建構工具仍託管於 gcr.io
。詳情請參閱「與 Cloud Build 整合」。
其他功能
本節說明您可能在 Container Registry 中設定的其他功能。
Artifact Analysis
構件分析支援 Container Registry 和 Artifact Registry。 構件分析說明文件包含這兩項產品。
- 這兩項產品都使用相同的構件分析 API。如果您在 Container Registry 或 Artifact Registry 中啟用 Artifact Analysis API,這兩項產品都會啟用 API。
- 這兩項產品會使用相同的 Pub/Sub 主題來傳送構件分析通知。
- 您仍可繼續使用 gcloud container images 指令,列出與
gcr.io
映像檔路徑相關聯的附註和事件。
Container Registry | Artifact Registry |
---|---|
針對支援的 OS 映像檔,透過隨選掃描功能掃描 OS 和語言套件安全漏洞。自動掃描只會傳回 OS 安全漏洞資訊。
進一步瞭解掃描類型。
|
透過隨選和自動掃描功能,掃描 OS 和語言套件安全漏洞。進一步瞭解掃描類型。
|
Pub/Sub 通知
Artifact Registry 會將變更發布至與 Container Registry 相同的 gcr
主題。如果您已在與 Artifact Registry 相同的專案中,搭配 Container Registry 使用 Pub/Sub,則無需額外設定。
如果您在獨立專案中設定 Artifact Registry,可能沒有 gcr
主題。如需設定操作說明,請參閱設定 Pub/Sub 通知。
服務範圍
透過 VPC Service Controls,您可以為 Google 代管服務的資源設定安全範圍,並控管跨服務邊界的資料移動。
如需操作說明,請參閱「保護服務範圍內的存放區」。
清除 Container Registry 映像檔
準備停止使用 Container Registry 時,請刪除 Container Registry 的儲存空間值區,藉此刪除剩餘的映像檔。
如要刪除每個 Container Registry 儲存空間 bucket:
主控台
- 前往 Google Cloud 控制台的 Cloud Storage 頁面。
選取要刪除的儲存空間值區。在 bucket 名稱中,
PROJECT-ID
是您的 Google Cloud 專案 ID。- gcr.io:
artifacts.PROJECT-ID.appspot.com
- asia.gcr.io:
asia.artifacts.PROJECT-ID.appspot.com
- eu.gcr.io:
eu.artifacts.PROJECT-ID.appspot.com
- us.gcr.io:
us.artifacts.PROJECT-ID.appspot.com
- gcr.io:
按一下 [Delete] (刪除),系統會顯示確認對話方塊。
如要確認刪除,請輸入 bucket 名稱,然後按一下「Delete」(刪除)。
gcloud
如要大量刪除 bucket 中十萬張以上的圖片,請避免使用 gcloud CLI,因為刪除程序需要很長時間才能完成。請改用 Google Cloud 控制台執行這項作業。詳情請參閱大量刪除 Cloud Storage 物件。
如要刪除 bucket,請使用 gcloud storage rm
指令,並加上 --recursive
旗標。
gcloud storage rm gs://BUCKET-NAME --recursive
將 BUCKET-NAME
替換為 Container Registry 儲存空間值區名稱。在 bucket 名稱中,PROJECT-ID
是您的
Google Cloud
專案 ID。
- gcr.io:
artifacts.PROJECT-ID.appspot.com
- asia.gcr.io:
asia.artifacts.PROJECT-ID.appspot.com
- eu.gcr.io:
eu.artifacts.PROJECT-ID.appspot.com
- us.gcr.io:
us.artifacts.PROJECT-ID.appspot.com
回應類似下列範例:
Removing gs://artifacts.my-project.appspot.com/...
如果其他 Google Cloud 服務在同一個 Google Cloud專案中執行,請保持啟用 Container Registry API。如果您嘗試停用 Container Registry API。如果專案中已啟用設定相依性的其他服務,Container Registry 會顯示警告。停用 Container Registry API 時,系統會自動停用同一個專案中設定了依附元件的任何服務,即使您目前並未搭配這些服務使用 Container Registry 也是如此。
後續步驟
- 請嘗試 Docker 快速入門導覽課程。