Container Registry에서 이미지 복사

Container Registry에서 Artifact Registry로 전환하는 과정에서 Artifact Registry에서 유지할 Container Registry 이미지를 복사할 수 있습니다.

시작하기 전에

다음 사항을 확인하세요.

  1. 이미지를 위해 Artifact Registry에 기존 Docker 저장소를 만들었습니다.
  2. 저장소에 액세스할 수 있는 권한을 구성했습니다.
  3. 저장소에 대한 인증을 구성했습니다.

이러한 태스크와 Container Registry에서 동일한 태스크를 비교하는 방법에 대한 자세한 내용은 Container Registry 사용자 설정 가이드를 참조하세요.

개요

Artifact Registry에서 저장하고 재사용할 Container Registry의 이미지를 복사하는 옵션에는 여러 가지가 있습니다. 단일 명령어로 이미지 집합을 복사할 수 있으므로 gcrane 도구로 파일을 복사하는 것이 좋습니다.

비용을 줄이려면 컨테이너를 Artifact Registry에 복사하기 전에 태그가 지정되지 않은 오래된 이미지를 삭제하세요.

Container Registry에서 태그가 지정되지 않은 이미지 삭제

태그가 지정되지 않은 이미지를 삭제하면 Container Registry의 스토리지 비용뿐만 아니라 Container Registry에서 Artifact Registry로 이미지를 복사하는 데 드는 비용이 줄어듭니다.

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

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

gcrane으로 이미지 복사

Artifact Registry로 이미지를 복사하려면 gcrane 도구를 사용하는 것이 좋습니다.

gcrane에서는 다음과 같은 몇 가지 이점을 제공합니다.

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

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

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

    비용: Compute Engine VM의 인스턴스 업타임입니다. VM 인스턴스가 Container Registry 스토리지 버킷과 다른 위치에 있는 경우 복사하는 이미지에 네트워크 이그레스 요금이 적용됩니다.

  • Cloud Shell - 약 40GB 이하의 작은 세트를 복사하는 옵션입니다. gcrane는 이미 업로드된 이미지 레이어 업로드를 건너뛰기 때문에 복사 중인 새 데이터에는 이 한도가 적용됩니다.

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

    비용: Cloud Shell 인스턴스가 Container Registry 스토리지 버킷과 다른 위치에 있는 경우, 복사하는 이미지에 네트워크 이그레스 요금이 부과됩니다. Cloud Shell 세션의 위치를 선택할 수 없습니다. 현재 세션의 위치를 확인하려면 다음 명령어를 실행하세요.

    curl metadata/computeMetadata/v1/instance/zone
    
  • 로컬 머신 - 다른 옵션을 사용할 수 없는 경우 로컬 머신에서 gcrane를 실행할 수 있습니다.

    비용: 복사하는 이미지에 네트워크 이그레스 요금이 부과됩니다.

Compute Engine 설정

gcrane을 사용하여 Compute Engine VM 인스턴스의 이미지를 복사하려면 다음 안내를 따르세요.

  1. Container Registry 및 Artifact Registry가 사용 설정된 동일한 프로젝트에 VM 인스턴스를 만듭니다. 비용을 최소화하려면 Container Registry 호스트와 동일한 위치에 인스턴스를 만듭니다.
  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. Container RegistryArtifact Registry 모두에 인증을 받았는지 확인합니다. 서비스마다 다른 계정을 사용하는 경우 두 서비스 모두에서 인증을 받아야 합니다.

  2. GitHub 저장소에서 gcrane를 다운로드합니다. 다음 명령어를 사용하여 명령줄에서 다운로드할 수 있습니다.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  3. 다음 명령어를 실행하여 gcrane 명령어를 실행 가능하게 만듭니다. 이 명령어는 다운로드된 파일의 이름을 go-containerregistry.tar.gz이라고 가정합니다.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  4. 명령어 gcrane --help를 실행하여 설치를 확인합니다.

이제 이미지를 복사할 준비가 되었습니다. 계속하려면 다음 안내를 따르세요.

복사할 이미지 식별

gcrane을 설치하면 Container Registry의 기존 이미지를 나열하여 복사할 이미지를 찾을 수 있습니다.

기존 이미지를 나열하려면 다음 명령어를 실행합니다.

gcrane ls LOCATION.gcr.io/PROJECT

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

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

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

gcrane ls -r LOCATION.gcr.io/PROJECT/PATH

각 명령어에 대해 다음을 수행합니다.

  • LOCATION을 레지스트리의 멀티 리전(asia, eu, us)으로 바꿉니다.
  • PROJECT를 프로젝트 ID로 바꿉니다.

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

이미지 복사

Container Registry의 개별 이미지, 특정 위치의 지정된 경로 아래에 있는 모든 이미지 또는 한 위치에 저장된 모든 이미지를 복사할 수 있습니다.

단일 이미지 복사

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

gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE

각 항목의 의미는 다음과 같습니다.

  • GCR-LOCATION은 Container Registry 호스트의 멀티 리전(asia, eu, us)입니다.
  • AR-LOCATION은 저장소의 리전 또는 멀티 리전입니다.
  • PROJECT는 프로젝트 ID입니다.
  • REPOSITORY은 Artifact Registry 저장소의 이름입니다.
  • GCR-IMAGE는 Container Registry에서 복사할 이미지입니다.
  • AR-IMAGE은 Artifact Registry의 이미지 이름입니다.

예를 들어 다음과 같은 소스 및 대상 이미지를 생각해 보세요.

  • Container Registry 이미지: eu.gcr.io/my-project/my-image:tag1
  • Artifact Registry 이미지: europe-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

다음 명령어를 실행하여 이미지를 복사합니다.

gcrane cp eu.gcr.io/my-project/my-image:tag1 \
europe-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

경로 아래의 모든 이미지 복사

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

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH

각 항목의 의미는 다음과 같습니다.

  • GCR-LOCATION은 Container Registry 호스트의 멀티 리전(asia, eu, us)입니다.
  • AR-LOCATION은 저장소의 리전 또는 멀티 리전입니다.
  • PROJECT는 프로젝트 ID입니다.
  • REPOSITORY은 Artifact Registry 저장소의 이름입니다.
  • GCR-PATH은 복사할 파일의 경로입니다.
  • AR-PATH는 Artifact Registry 저장소의 이미지 경로입니다.

예를 들어 다음과 같은 소스 및 대상 경로를 생각해 보세요.

  • Container Registry 경로: eu.gcr.io/my-project/test-images/testing
  • Artifact Registry 경로: europe-west1-docker.pkg.dev/my-project/my-repo/test-images/testing

다음 명령어는 test-images/testing 아래의 모든 이미지를 my-repo 저장소에 재귀적으로 복사합니다.

gcrane cp -r eu.gcr.io/my-project/test-images/testing \
europe-west1-docker.pkg.dev/my-project/my-repo/test-images/testing

Container Registry 위치의 모든 이미지 복사

Container Registry 멀티 리전의 모든 이미지를 복사하려면 다음 명령어를 실행합니다.

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY

각 항목의 의미는 다음과 같습니다.

  • GCR-LOCATION은 Container Registry 호스트의 멀티 리전(asia, eu, us)입니다.
  • AR-LOCATION은 저장소의 리전 또는 멀티 리전입니다.
  • PROJECT는 프로젝트 ID입니다.
  • REPOSITORY은 Artifact Registry 저장소의 이름입니다.

프로젝트에서 두 개 이상의 Container Registry 위치에 대한 이미지를 복사하려면 각 호스트마다 명령어를 한 번 실행합니다.

예를 들어 다음과 같은 소스 레지스트리와 대상 Artifact Registry 저장소를 고려합니다. 이 예시에서는 Container Registry와 Artifact Registry는 서로 다른 프로젝트에 있습니다.

  • Container Registry 호스트: eu.gcr.io/my-project
  • Artifact Registry 이미지: europe-west1-docker.pkg.dev/new-project/my-repo

다음 명령어는 my-project 프로젝트의 eu 멀티 리전에서 new-project 프로젝트의 my-repo 저장소에 모든 이미지를 복사합니다.

gcrane cp -r eu.gcr.io/my-project \
europe-west1-docker.pkg.dev/new-project/my-repo

Docker로 이미지 복사

gcranegcloud 복사 메서드와 달리 이 방식은 두 단계로 진행됩니다.

  1. Container Registry에서 이미지 가져오기
  2. Artifact Registry 저장소로 이미지 내보내기

비용: 이미지를 가져오면 네트워크 이그레스에 대해 요금이 청구됩니다. 구체적인 가격은 가져오기 명령어의 목적지에 따라 다릅니다. 예를 들어 Cloud Shell 세션에서 이미지를 가져오면 Google Cloud 내의 네트워크 이그레스 가격 책정이 적용됩니다. Google Cloud 외부의 머신으로 이미지를 가져오면 일반 네트워크 이그레스 가격 책정이 적용됩니다.

Artifact Registry에서 이미지를 태그 지정하고 내보내고 가져오는 데 사용하는 Docker 명령어는 Container Registry에서 사용하는 명령어와 유사합니다. 하지만 다음과 같은 두 가지 주된 차이점이 있습니다.

  • Artifact Registry Docker 저장소의 호스트 이름에는 위치 프리픽스와 이어서 -docker.pkg.dev가 붙습니다. 예를 들어 australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev, europe-docker.pkg.dev가 있습니다.
  • Artifact Registry는 단일 프로젝트에서 여러 Docker 저장소를 지원하므로 명령어에 저장소 이름을 지정해야 합니다.

Docker를 사용하여 이미지를 Artifact Registry에 복사하려면 Container Registry에서 이미지를 가져온 후 Artifact Registry 저장소로 내보냅니다.

예를 들어 eu 멀티 리전의 Container Registry 이미지를 europe-west1 리전의 Artifact Registry 저장소에 복사하려는 경우를 가정해 보겠습니다.

  • Container Registry 이미지: eu.gcr.io/my-project/my-image:tag1
  • Artifact Registry 이미지: europe-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

다음 명령어는 Container Registry에서 이미지를 가져옵니다.

docker pull eu.gcr.io/my-project/my-image:tag1

다음 명령어는 이미지를 my-repo라는 Artifact Registry 저장소에 내보냅니다.

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

다른 프로젝트에서 설정한 Artifact Registry 저장소로 이미지를 내보낼 수도 있습니다. 이 예시에서는 동일한 소스 이미지를 new-project 프로젝트의 my-repo 저장소에 내보냅니다.

docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image

Artifact Registry에서 이미지를 내보내고 가져오는 방법에 대한 자세한 내용은 이미지 내보내기 및 가져오기를 참조하세요.

gcloud로 이미지 복사

gcloud container images add-tag 명령어를 사용하여 Container Registry의 이미지를 Artifact Registry 저장소에 복사합니다.

비용: Container Registry가 Artifact Registry 저장소와 다른 위치에 있으면 복사하는 이미지에 네트워크 이그레스 요금이 적용됩니다. 두 서비스가 같은 위치에 있는 경우 네트워크 이그레스는 무료입니다.

다음 명령어를 실행하여 Container Registry에서 Artifact Registry로 이미지를 복사합니다.

gcloud container images add-tag GCR-IMAGE AR-IMAGE

각 항목의 의미는 다음과 같습니다.

  • GCR-IMAGE은 Container Registry 이미지의 전체 경로입니다.
  • AR-IMAGE은 Artifact Registry 저장소에 있는 이미지의 전체 경로입니다.

예를 들어 다음과 같은 소스 및 대상 이미지를 가정해 보겠습니다.

  • Container Registry 이미지: eu.gcr.io/my-project/my-image:tag1
  • Artifact Registry 이미지: europe-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

이 명령어는 멀티 리전 eu의 Container Registry에서 europe-west1 리전의 my-repo 저장소에 이미지를 복사합니다.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1

다른 프로젝트에서 설정한 Artifact Registry 저장소에 이미지를 복사할 수도 있습니다. 이 예시에서는 동일한 소스 이미지를 new-project 프로젝트의 my-repo 저장소에 복사합니다.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-west1-docker.pkg.dev/new-project/my-repo/my-image:tag1

다음 단계

  • 이미지 내보내기, 가져오기 및 배포가 Container Registry와 비교하여 어떠한지에 대한 자세한 내용을 확인하려면 Artifact Registry로 전환하는 다른 단계에 대해 알아보세요.
  • Docker 빠른 시작 사용해 보기