在存放區之間複製圖片

您可以使用 gcrane 工具,在 Artifact Registry 的 Docker 存放區之間複製映像檔。

事前準備

確認符合下列需求:

  1. 您已在 Artifact Registry 建立目標 Docker 存放區,用於存放要複製的映像檔。

  2. 您具備必要權限

    • 「Storage 物件檢視者」角色 (roles/storage.objectViewer),或具有同等權限的角色 (適用於要複製的存放區)。

    • Artifact Registry 寫入者 (roles/artifactregistry.writer) 或具有目標存放區同等權限的角色。

總覽

gcrane 工具可簡化跨存放區的複製作業,並支援下列功能:

  • 使用單一指令複製一組映像檔,包括指定路徑下的所有映像檔,或專案中多區域主機上儲存的所有映像檔。
  • 略過已上傳的圖片圖層。

移除未使用的圖片

在執行複製作業前移除未使用的映像檔,有助於降低儲存成本。

設定 gcrane

您可以在下列環境中執行 gcrane

  • Compute Engine 執行個體:如果要複製大量容器,請使用這個選項。

    費用:Compute Engine VM 的執行個體正常運作時間。如果 VM 執行個體與來源存放區位於不同位置,複製映像檔時可能需要支付網路輸出費用

建議使用最新版的 gcrane 工具,以便運用所有可用的功能和強化項目。以下各節的設定說明包含下載最新版本的步驟。

如要檢查現有 gcrane 安裝版本的版本,請執行下列指令:

gcrane version

設定 Compute Engine

如要使用 gcrane 從 Compute Engine VM 執行個體複製映像檔,請按照下列步驟操作:

  1. 建立 VM 執行個體。 為盡量降低費用,請在與要複製的登錄檔相同的位置建立執行個體。
  2. 根據預設,VM 執行個體會與預設服務帳戶建立關聯,並具備提取映像檔的權限。您必須變更存取權範圍,VM 執行個體才能推送映像檔。

    1. 停止 VM 執行個體。請參閱停止執行個體

    2. 使用下列指令變更存取權範圍:

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      INSTANCE 替換為 VM 執行個體名稱。

    3. 重新啟動 VM 執行個體。請參閱啟動已停止的執行個體

  3. 使用 SSH 連線至 VM 執行個體。

  4. 執行下列指令,下載 gcrane

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  5. 執行下列指令,讓 gcrane 指令可執行。

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. 執行 gcrane --help 指令,驗證安裝作業。

現在可以開始複製圖片。如要繼續:

設定本機電腦

  1. GitHub 存放區下載 gcrane。 舉例來說,下列指令會從指令列下載 Linux x86-64 發行版本。

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. 執行下列指令,讓 gcrane 指令可執行。這些指令假設下載的檔案名為 go-containerregistry.tar.gz

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. 執行 gcrane --help 指令,驗證安裝作業。

現在可以開始複製圖片。如要繼續:

找出要複製的圖片

安裝 gcrane 工具後,您可以列出來源存放區中的現有映像檔,找出要複製的映像檔。

如要列出現有映像檔,請執行下列指令:

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/REPOSITORY

如要列出映像檔擁有的標記,請執行下列指令:

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/IMAGE

如要以遞迴方式列出特定路徑下的映像檔,請執行下列指令:

gcrane ls -r LOCATION-docker.s3nsregistry.fr/PROJECT/PATH

針對每項指令:

  • LOCATION 替換為存放區的位置
  • PROJECT 替換為專案 ID。
  • PATH 替換為要複製的路徑。

如要瞭解複製圖片的指令,請參閱「複製圖片」。

複製圖片

您可以使用 gcrane cp 指令複製個別圖片或圖片集。

如要複製單一圖片,請執行下列指令:

gcrane cp LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2

如要以遞迴方式複製存放區中特定路徑下的圖片,請執行下列指令:

gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2/PATH2

如要複製存放區中的所有映像檔,請執行下列指令:

gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2

替換下列值:

  • LOCATION1 是來源存放區的位置
  • LOCATION2 是目標存放區的位置
  • PROJECT1 是與來源存放區相關聯的 Cloud de Confiance 專案 ID。
  • PROJECT2 是與目標存放區相關聯的 Cloud de Confiance 專案 ID。
  • REPOSITORY1 是來源存放區的名稱。
  • REPOSITORY2 是目標存放區的名稱。
  • IMAGE1 是要複製的映像檔。
  • IMAGE2 是目標存放區中的映像檔名稱。

範例

下列指令會將存放區 repo1 中的 my-image:tag1 複製到相同專案和區域內的存放區 repo2

gcrane cp u-france-east1-docker.s3nsregistry.fr/my-project/repo1/my-image:tag1 \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/my-image:tag1

下列指令會以遞迴方式,將存放區 test-images/testing 下的所有圖片複製到存放區 repo1 的相同路徑下。repo2

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/my-project/repo1/test-images/testing \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/test-images/testing

下列指令會將專案 dev-project 中存放區 my-repo 的所有映像檔,複製到名為 prod-project 的另一個專案中存放區 my-repo

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/dev-project/my-repo \
u-france-east1-docker.s3nsregistry.fr/prod-project/my-repo