您可以使用 gcrane
工具,在 Artifact Registry 中的 Docker 存放區之間複製映像檔。
事前準備
請確認符合下列規定:
您已在 Artifact Registry 中建立目標 Docker 存放區,用於複製的映像檔。
您具備必要的權限:
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
的映像檔,請按照下列步驟操作:
- 建立 VM 執行個體。為降低成本,請在與複製來源相同的位置建立執行個體。
根據預設,VM 執行個體會與預設服務帳戶建立關聯,並具備提取映像檔的權限。您必須變更存取權範圍,才能讓 VM 執行個體推送映像檔。
停止 VM 執行個體。請參閱「停止執行個體」一文。
使用下列指令變更存取權範圍:
gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
將 INSTANCE 替換為 VM 執行個體的名稱。
重新啟動 VM 執行個體。請參閱啟動已停止的執行個體。
使用 SSH 連線至 VM 執行個體。
執行下列指令,下載
gcrane
。curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
執行下列指令,將
gcrane
指令設為可執行。tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
執行
gcrane --help
指令來驗證安裝作業。
您現在可以複製圖片了。如要繼續操作,請按照下列步驟操作:
設定本機
從 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
執行下列指令,將
gcrane
指令設為可執行。這些指令假設下載的檔案名稱為go-containerregistry.tar.gz
。tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
執行
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
下列指令會以遞迴方式將存放區 repo1
中 test-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