在存放區之間複製圖片

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

事前準備

請確認符合下列規定:

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

  2. 您具備必要的權限

    • Artifact Registry Reader (roles/storage.objectViewer) 或具有您要複製的存放區等同權限的角色。

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

總覽

gcrane 工具可簡化跨儲存庫的複製作業,支援以下功能:

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

移除未使用的圖片

在執行複製作業前移除未使用的圖片,有助於降低儲存費用。

您可以使用多種工具,自動識別並移除不再需要的圖片。舉例來說,gcr-cleaner 工具可協助您根據不同條件找出並移除舊圖片。gcr-cleaner 工具並非 Google 官方產品。

如要進一步瞭解如何設定及使用這項工具,請參閱 gcr-cleaner 說明文件。

設定 gcrane

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

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

    成本:Compute Engine VM 的執行個體正常運作時間。如果 VM 執行個體位於來源存放區以外的位置,您複製的映像檔可能會產生網路輸出費用

建議您使用最新版的 gcrane 工具,充分運用所有可用的功能和強化功能。下列章節中的設定說明包含下載最新版本的步驟。

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

gcrane version

設定 Compute Engine

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

  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 是與來源存放區相關聯的 Trusted Cloud 專案 ID。
  • PROJECT2 是與目標存放區相關聯的 Trusted Cloud 專案 ID。
  • REPOSITORY1 是來源存放區的名稱。
  • REPOSITORY2 是目標存放區的名稱。
  • IMAGE1 是您要複製的圖片。
  • IMAGE2 是目標存放區中映像檔的名稱。

範例

以下指令會將 my-image:tag1 從存放區 repo1 複製到相同專案和區域中的存放區 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

下列指令會以遞迴方式將存放區 repo1test-images/testing 下的所有圖片複製到存放區 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