Container Registry 是舊版服務,可在 Google Cloud上儲存私人容器映像檔。
這項服務已淘汰。您可以將現有的映像檔移至 Artifact Registry,並繼續使用 gcr.io
網域存取這些映像檔。自 2024 年 5 月 15 日起,如果專案先前未使用過 Container Registry,專案中的 gcr.io
網域映像檔就會託管於 Artifact Registry。
如要比較 Container Registry 和 Artifact Registry,以及瞭解如何從 Container Registry 轉換至 Artifact Registry,請參閱「從 Container Registry 轉換」。
使用圖片
許多人皆使用 Docker Hub 做為儲存公開 Docker 映像檔的中央註冊資料庫,但是如果您要控制映像檔的存取權,則必須使用私人的註冊資料庫,例如 Artifact Registry 或 Container Registry。
您可以透過安全的 HTTPS 端點存取登錄檔,進而從任何系統、VM 執行個體或您自己的硬體來推送、提取及管理映像檔。
- 將登錄項與 Google Cloud CI/CD 服務或現有的 CI/CD 工具整合。
- 儲存來自 Cloud Build 的容器映像檔。
- 將容器映像檔部署至 Google Cloud 執行階段,包括 Google Kubernetes Engine、Cloud Run、Compute Engine 和 App Engine 彈性環境。
- Identity and Access Management 提供一致的憑證與存取權控管。
- 保護容器軟體供應鏈。
- 使用Artifact Analysis 管理容器中繼資料,並掃描容器安全漏洞。
- 使用二進位授權強制執行部署政策。
- 在 VPC Service Controls 安全範圍內保護登錄。
登錄檔
您最多可以在每個 Container Registry 專案中建立四個多區域主機。 Google Cloud如果您想建立更多使用不同存取政策的獨立存放區,或是將圖片儲存在區域中,而不是多個區域中,請改用 Artifact Registry。
Container Registry 中的註冊資料庫是按照主機和專案 ID 命名。如要使用映像檔 (像是執行推送、提取或刪除作業等),請使用下列格式來標示映像檔:
HOSTNAME/PROJECT-ID/IMAGE:TAG
或
HOSTNAME/PROJECT-ID/IMAGE@IMAGE-DIGEST
其中:
HOSTNAME 是圖片的儲存位置:
gcr.io
目前代管位在美國的映像檔,但此位置日後可能會改變us.gcr.io
代管位在美國的映像檔,使用的儲存空間值區與gcr.io
代管的映像檔不同eu.gcr.io
代管位在歐盟成員國的映像檔asia.gcr.io
代管位在亞洲的映像檔
這些位置對應至 Cloud Storage 儲存值區的多區域。將映像檔推送至使用新主機名稱的註冊資料庫時,Container Registry 會在指定的多地區位置建立儲存空間值區。這個值區是註冊資料庫的基礎儲存空間,在專案中,主機名稱相同的所有註冊資料庫會共用一個儲存空間值區。
PROJECT-ID 是您的 Google Cloud 主控台專案 ID。如果您的專案 ID 包含冒號 (
:
),請參閱下方的網域範圍專案。IMAGE 是映像檔的名稱,可以和映像檔的本機名稱不同。在 Google Cloud 主控台中,專案的註冊資料庫會按照映像檔名稱列出。每個存放區可儲存多個名稱相同的映像檔。例如,名稱為「my-image」的圖片在存放區中可以有數個不同版本。
在結尾加上
:TAG
或@IMAGE-DIGEST
可讓您區分圖片的特定版本,不過這是選用參數。如果您未指定標記或摘要,Container Registry 會尋找具有預設標記latest
的映像檔。請參閱下方的註冊資料庫中的映像檔版本。
針對註冊表 gcr.io/PROJECT-ID
中的圖片 my-image
,您可以使用下列格式推送或提取圖片:
gcr.io/PROJECT-ID/my-image:tag1
其中 PROJECT-ID 是您在 Google Cloud 主控台專案 ID。
使用存放區整理圖片
您可以在註冊中心的存放區中,將相關圖片分組。標記、推送或拉取映像檔時,請在映像檔路徑的專案下方指定存放區名稱。
在 Container Registry 中,存放區是組織輔助工具。它們會在圖片路徑中扮演邏輯資料夾的角色,但不會反映實際的檔案系統結構,也不支援更精細的存取權控管。
請考慮在專案 builds
的主機 us.gcr.io
中儲存的下列圖片:
us.gcr.io/builds/product1/dev/product1-app:beta-2.0
us.gcr.io/builds/product1/stable/product1:1.0
us.gcr.io/builds/product2/dev/product2:alpha
us.gcr.io/builds/product2/stable/product2:1.0
如果使用者擁有 builds
專案中 us.gcr.io
主機的寫入存取權,就會擁有 us.gcr.io/builds
下任何路徑的寫入存取權,因為所有圖片都位於同一個儲存空間值區,且您無法在存放區或圖片層級限制存取權。
如果需要更精細的存取權控管,可以改用 Artifact Registry。在 Artifact Registry 中,存放區是個別資源,因此您可以將個別的 IAM 政策套用至 us-docker.pkg.dev/builds/product1
和 us-docker.pkg.dev/builds/product2
等存放區。
註冊資料庫中的映像檔版本
註冊資料庫可以包含許多映像檔,而且這些映像檔可以有不同的版本。如要識別註冊資料庫中映像檔的特定版本,您可以指定映像檔標記或摘要。
- 標記的用途和標籤相同。您可以為圖片套用多個標記。舉例來說,圖片可能會使用標記
v1.5
來表示版本號碼,並使用release-candidate
表示已準備好進行最終測試。 - 每個映像檔版本的摘要會自動產生且不會重複,並採用
@IMAGE-DIGEST
的格式,其中 IMAGE-DIGEST 是映像檔內容的 sha256 雜湊值。
如要識別映像檔 my-image
的特定版本:
新增圖片標記:
gcr.io/PROJECT-ID/my-image:tag1
或是新增映像檔的摘要:
gcr.io/PROJECT-ID/my-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d
其中 PROJECT-ID 是您在 Google Cloud 控制台專案 ID。如果您的專案 ID 包含冒號 (:
),請參閱下方的網域範圍專案。
在 Google Cloud 主控台的「Images」畫面中,「Tags」欄會列出映像檔的標記。按一下映像檔的版本,即可查看包含「映像檔摘要」在內的中繼資料。
如要瞭解如何修改標記,請參閱「為圖片加上標記」。
網域範圍專案
如果專案範圍是您的網域,則專案 ID 會包含後面加入冒號 (:
) 的網域名稱。由於 Docker 處理冒號的方式有所不同,因此當您在 Container Registry 中指定映像檔時,必須將冒號字元換成正斜線。請使用下列格式來識別這些專案類型中的映像檔:
HOSTNAME/[DOMAIN]/[PROJECT]/IMAGE
例如,ID 為 example.com:my-project
的專案可能會有下列圖片:
gcr.io/example.com/my-project/image-name
網址格式的註冊資料庫名稱
網址 https://HOSTNAME/PROJECT-ID/IMAGE
是 Google Cloud 控制台中圖片的網址。任何具備註冊主機存取權且已通過驗證的使用者,都可以使用連結查看主機儲存的任何圖片。如要進一步瞭解圖片路徑格式,請參閱「註冊表」。
舉例來說,下列網址會連結至Google Cloud 主控台中的公開註冊資料庫:
容器映像檔格式
Container Registry 支援 Docker Image Manifest V2 和 OCI 映像檔格式。詳情請參閱「容器映像檔格式」。
如果您想集中儲存映像檔和其他類型的構件,建議改用 Artifact Registry 而非 Container Registry。
存取權控管
在與註冊資料庫屬於同個專案的 Cloud Storage 值區中,Container Registry 會儲存容器映像檔的標記和層級檔案。如要設定此值區的存取權,請使用 Cloud Storage 的身分與存取權管理 (IAM) 設定。
有登錄主機存取權的使用者,可以存取主機儲存空間值區中的任何映像檔。如果需要更精細的存取權控管,建議您使用Artifact Registry。Artifact Registry 提供存放區層級存取權控管功能。
根據預設,專案擁有者和編輯者擁有權限,可推送及提取該專案的 Container Registry 值區。專案檢視者則只有提取權限。
如要進一步瞭解 Container Registry 權限,請參閱「設定存取權控管」。
如要瞭解將映像檔中繼資料從 Cloud Storage 移至高效能後端資料庫的相關計劃,請參閱 Container Registry 的淘汰通知。
驗證
您必須先設定驗證機制,才能推送或提取映像檔。您可以將 Docker 設為使用 Google Cloud CLI,驗證傳送至 Container Registry 的要求。Container Registry 也支援使用存取權憑證或 JSON 金鑰檔的進階驗證方法。
Docker 憑證輔助程式
Docker 需要 Container Registry 的存取權來推送及提取映像檔。您可以使用 Docker 憑證輔助程式指令列工具,設定要搭配 Docker 使用的 Container Registry 憑證。
憑證輔助程式會先自動擷取 Container Registry 憑證,或是從 --token-source
標記指定的位置擷取憑證,接著再將憑證寫入 Docker 的設定檔。這樣一來,您就可以使用 Docker 指令列工具 docker
,直接與 Container Registry 互動。
詳情請參閱進階驗證。
Container Registry 服務帳戶
啟用 Container Registry API 時,Container Registry 會在專案中新增服務帳戶,這個服務帳戶的 ID 如下所示:
service-[PROJECT_NUMBER]@containerregistry.iam.gserviceaccount.com
這個 Container Registry 服務帳戶是專門設計用來讓 Container Registry 在您的專案上執行服務職責。Google 管理這個帳戶,但該帳戶僅限特定專案使用。
如果您刪除此服務帳戶或變更其權限,某些 Container Registry 功能將無法正確運作,因此我們建議您不要修改角色或刪除帳戶。
如要進一步瞭解這個服務帳戶及其權限,請參閱「Container Registry 服務帳戶」。
拉取快取
mirror.gcr.io
登錄檔會快取 Docker Hub 中經常要求的公開映像檔。
使用快取的映像檔可加快從 Docker Hub 提取的速度。您的用戶端會先檢查 Docker Hub 映像檔的快取副本,再嘗試直接從 Docker Hub 提取。
詳情請參閱「提取已快取的 Docker Hub 映像檔」。
通知
您可以使用 Pub/Sub 來取得容器映像檔的變更通知。
詳情請參閱「設定 Pub/Sub 通知」。
搭配使用 Container Registry 與 Google Cloud
Compute Engine 執行個體和 Google Kubernetes Engine 叢集可以根據執行個體上的 Cloud Storage 範圍推送及提取 Container Registry 映像檔。請參閱「使用 Container Registry 與 Google Cloud」。
儲存在 Container Registry 的映像檔可部署至 App Engine 彈性環境。
持續推送軟體更新工具整合
Container Registry 可搭配常見的持續整合和持續推送軟體更新系統使用,包括 Cloud Build 和 Jenkins 等第三方工具。
Container Registry 可與 Google Cloud 服務完美整合。舉例來說,Cloud Build 可以根據預設,將映像檔推送至同一個專案中的 Container Registry 主機,並從該主機提取映像檔。根據預設,Google Kubernetes Engine 和 Cloud Run 等執行階段環境也可以從同一個專案中的登錄主機提取映像檔。
或者,您也可以使用 Jenkins 等第三方工具來建構、提取及推送映像檔。使用第三方工具時,您需要為代表該工具與 Container Registry 互動的帳戶設定權限和驗證。
如要查看整合範例,請參閱包含 Container Registry 的 Google Cloud 技術指南。