저장소 간 이미지 복사

gcrane 도구를 사용하여 Artifact Registry의 Docker 저장소 간에 이미지를 복사할 수 있습니다.

이 도구를 사용하여 Container Registry에서 Artifact Registry로 이미지를 복사할 수도 있습니다.

시작하기 전에

다음 요구사항을 확인하세요.

  1. 복사할 이미지의 Artifact Registry에서 대상 Docker 저장소를 만들었습니다.

  2. 다음과 같은 필수 권한이 있습니다.

    • Artifact Registry 리더(roles/storage.objectViewer) 또는 복사하는 원본 저장소에 대한 이에 상응하는 권한이 있는 역할

    • Artifact Registry 작성자(roles/artifactregistry.writer) 또는 대상 저장소에 대한 이에 상응하는 권한이 있는 역할

개요

gcrane 도구는 다음과 같은 지원을 통해 여러 저장소 간의 복사를 간소화해 줍니다.

  • 단일 명령어를 사용하여 지정된 경로 아래의 모든 이미지 또는 프로젝트의 멀티 리전 호스트에 저장된 모든 이미지를 포함한 이미지 모음을 복사합니다.
  • 이미 업로드된 이미지 레이어를 건너뜁니다.

사용하지 않는 이미지 삭제

복사 작업을 수행하기 전에 사용하지 않는 이미지를 삭제하면 스토리지 비용을 줄이는 데 도움이 됩니다.

여러 도구를 사용해 더 이상 필요하지 않은 이미지를 식별하고 해당 이미지의 삭제를 자동화할 수 있습니다. 예를 들어 gcr-cleaner 도구를 사용하면 다양한 기준에 따라 이전 이미지를 찾고 삭제할 수 있습니다. gcr-cleaner 도구는 공식 Google 제품이 아닙니다.

도구 설정 및 사용에 대한 자세한 내용은 gcr-cleaner 문서를 참조하세요.

gcrane 설정

다음 환경에서 gcrane을 실행할 수 있습니다.

  • Compute Engine 인스턴스 - 복사할 컨테이너 수가 많은 경우 이 옵션을 사용합니다.

    비용: Compute Engine VM의 인스턴스 업타임을 기준으로 요금이 청구됩니다. VM 인스턴스가 소스 저장소와 다른 위치에 있는 경우 복사한 이미지에 네트워크 이그레스 요금이 부과될 수 있습니다.

  • Cloud Shell - 약 40GB 이하의 소규모 집합을 복사하는 옵션입니다. gcrane 도구는 이미 업로드된 이미지 레이어의 업로드를 건너뛰므로, 이 한도는 복사 중인 새 데이터에 적용됩니다.

    큰 저장소를 복사하면 요청 제한 시간 10분이 지나고 Cloud Shell 연결이 끊어질 수 있습니다.

    비용: Cloud Shell 인스턴스가 소스 저장소와 다른 위치에 있는 경우 복사한 이미지에 네트워크 이그레스 요금이 부과될 수 있습니다. Cloud Shell 세션의 위치를 선택할 수 없습니다. 현재 세션의 위치를 확인하려면 다음 명령어를 실행합니다.

    curl metadata/computeMetadata/v1/instance/zone
    

사용 가능한 모든 기능과 개선사항을 활용하려면 최신 버전의 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 명령어를 실행하여 설치를 확인합니다.

이제 이미지를 복사할 수 있습니다. 계속하려면 다음 안내를 따르세요.

Cloud Shell 설정

  1. Cloud Shell 창을 엽니다.

    Cloud Shell 열기

  2. 기본 프로젝트를 설정합니다. PROJECT를 Container Registry와 Artifact Registry가 설치된 프로젝트의 ID로 바꿉니다.

    gcloud config set project PROJECT
    
  3. 다음 명령어를 실행하여 gcrane 도구를 다운로드합니다.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  4. 다음 명령어를 실행하여 gcrane 명령어를 실행 가능하게 만듭니다.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. 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.pkg.dev/PROJECT/REPOSITORY

이미지에 있는 태그를 나열하려면 다음 명령어를 실행합니다.

gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE

특정 경로에 있는 이미지를 재귀적으로 나열하려면 다음 명령어를 실행합니다.

gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH

각 명령어마다 다음을 수행합니다.

  • LOCATION을 저장소 위치로 바꿉니다.
  • PROJECT를 프로젝트 ID로 바꿉니다.
  • PATH를 복사할 경로로 바꿉니다.

이미지 복사 명령어는 이미지 복사를 참조하세요.

이미지 복사

gcrane cp 명령어를 사용하면 개별 이미지 또는 이미지 집합을 복사할 수 있습니다.

단일 이미지를 복사하려면 다음 명령어를 실행합니다.

gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2

저장소의 특정 경로에 있는 이미지를 재귀적으로 복사하려면 다음 명령어를 실행합니다.

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

저장소의 모든 이미지를 복사하려면 다음 명령어를 실행합니다.

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2

다음 값을 바꿉니다.

  • LOCATION1은 소스 저장소의 위치입니다.
  • LOCATION2는 대상 저장소의 위치입니다.
  • PROJECT1은 소스 저장소와 연결된 Google Cloud 프로젝트 ID입니다.
  • PROJECT2는 대상 저장소와 연결된 Google Cloud 프로젝트 ID입니다.
  • REPOSITORY1은 소스 저장소의 이름입니다.
  • REPOSITORY2는 대상 저장소의 이름입니다.
  • IMAGE1은 복사할 이미지입니다.
  • IMAGE2는 대상 저장소에 있는 이미지의 이름입니다.

예시

다음 명령어는 repo1 저장소에서 동일한 프로젝트 및 리전의 repo2 저장소에 my-image:tag1을 복사합니다.

gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1

다음 명령어는 repo1 저장소에 있는 test-images/testing의 모든 이미지를 repo2 저장소의 동일 경로에 재귀적으로 복사합니다.

gcrane cp -r us-west1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-west1-docker.pkg.dev/my-project/repo2/test-images/testing

다음 명령어는 dev-project 프로젝트의 my-repo 저장소에 있는 모든 이미지를 다른 prod-project 프로젝트의 my-repo 저장소에 복사합니다.

gcrane cp -r us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo