Docker Hub 원격 저장소 만들기

Docker Hub의 프록시 역할을 할 원격 저장소를 만듭니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. API Artifact Registry, Secret Manager 사용 설정

    API 사용 설정

  5. Google Cloud CLI를 설치합니다.
  6. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  7. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. API Artifact Registry, Secret Manager 사용 설정

    API 사용 설정

  10. Google Cloud CLI를 설치합니다.
  11. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  12. Docker Hub 계정을 만듭니다.

필요한 역할

Docker Hub 원격 저장소를 만드는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

셸 선택

이 빠른 시작을 완료하려면 Cloud Shell 또는 로컬 셸을 사용하세요.

Cloud Shell
Cloud Shell은 Google Cloud에서 호스팅되는 리소스를 관리하는 데 사용되는 셸 환경입니다. Docker, Google Cloud의 기본 명령줄 인터페이스인 Google Cloud CLI가 사전에 설치되어 있습니다.
로컬 셸
로컬 셸을 사용하려는 경우 환경에 Docker 및 gcloud CLI를 설치해야 합니다.

Cloud Shell 시작

Cloud Shell을 시작하려면 다음 단계를 수행하세요.

  1. Google Cloud Console로 이동.

    Google Cloud console

  2. Cloud Shell 활성화 버튼  을 클릭합니다.

Console 하단의 프레임에서 Cloud Shell 세션이 열립니다. 이 셸을 사용하여 gcloud 명령어를 실행합니다.

로컬 셸 설정

gcloud CLI 및 Docker를 설치하려면 다음 단계를 수행하세요.

  1. gcloud CLI를 설치합니다. 기존 설치를 업데이트하려면 gcloud components update 명령어를 실행합니다.

  2. Docker가 아직 설치되어 있지 않으면 설치합니다.

  3. Docker에는 레지스트리와 상호작용하기 위한 액세스 권한이 필요합니다. Linux 또는 Windows에서 Docker 보안 그룹에 Docker 명령어를 실행하는 데 사용할 사용자를 추가합니다. Docker Desktop은 가상 머신에서 루트 사용자로 실행되므로 macOS에서는 이 단계가 필요하지 않습니다.

    Linux

    Docker 보안 그룹을 docker라고 합니다. 사용자 이름을 추가하려면 다음 명령어를 실행합니다.

    sudo usermod -a -G docker ${USER}
    

    Windows

    Docker 보안 그룹을 docker-users라고 합니다. 관리자 명령어 프롬프트에서 사용자를 추가하려면 다음 명령어를 실행합니다.

    net localgroup docker-users DOMAIN\USERNAME /add
    

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

    • DOMAIN은 Windows 도메인입니다.
    • USERNAME은 사용자 이름입니다.
  4. 그룹 멤버십 변경사항을 적용하려면 로그아웃했다가 다시 로그인합니다. 가상 머신을 사용하는 경우 멤버십 변경사항을 적용하려면 가상 머신을 다시 시작해야 할 수 있습니다.

  5. Docker가 실행 중인지 확인하려면 다음 Docker 명령어를 실행하세요. 현재 시간과 날짜가 반환됩니다.

    docker run --rm busybox date
    

    --rm 플래그는 종료 시 컨테이너 인스턴스를 삭제합니다.

Docker Hub 인증 구성

인증되지 않은 Docker Hub 할당량을 사용하지 않도록 하려면 원격 저장소를 사용할 때 Docker Hub에 인증하는 것이 좋습니다. 원격 저장소를 사용하면 Docker Hub 사용자 이름과 보안 비밀로 저장된 개인 액세스 토큰을 추가하여 Docker Hub에 인증할 수 있습니다.

Docker Hub 개인 액세스 토큰 만들기

  1. Docker Hub에 로그인합니다.
  2. 읽기 전용 권한이 있는 개인 액세스 토큰을 만듭니다.
  3. 액세스 토큰을 복사합니다.

  4. 로컬 또는 Cloud Shell에서 텍스트 파일에 액세스 토큰을 저장합니다.

보안 비밀에 개인 액세스 토큰 저장

콘솔

  1. Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager 페이지로 이동

  2. Secret Manager 페이지에서 보안 비밀 만들기를 클릭합니다.

  3. 보안 비밀 만들기 페이지의 이름에서 보안 비밀 이름을 my-secret으로 지정합니다.

  4. 보안 비밀 값 필드에 Docker Hub 개인 액세스 토큰을 입력합니다.

  5. 리전 섹션을 변경하지 않은 상태로 둡니다.

  6. 보안 비밀 만들기 버튼을 클릭합니다.

gcloud CLI

gcloud secrets create my-secret --data-file="/path/to/file.txt"

여기서 /path/to/file.txt는 개인 액세스 토큰이 포함된 텍스트 파일의 위치입니다.

Artifact Registry 서비스 계정에 보안 비밀에 대한 액세스 권한 부여

콘솔

  1. Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.

    보안 비밀 관리자 페이지로 이동

  2. Secret Manager 페이지에서 my-secret 옆에 있는 체크박스를 클릭합니다.

  3. 아직 열려 있지 않으면 정보 패널 표시를 클릭하여 패널을 엽니다.

  4. 정보 패널에서 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원 텍스트 영역에 Artifact Registry 서비스 계정의 이메일 주소를 입력합니다. Artifact Registry 서비스 계정 이메일 주소의 형식은 다음과 같습니다.

    service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

    여기서 PROJECT-NUMBER는 프로젝트 번호입니다.

    프로젝트 번호를 찾으려면 다음 안내를 따르세요.

    • Google Cloud 콘솔의 대시보드 페이지로 이동합니다.

      대시보드 페이지로 이동

    • 페이지 상단에서 선택 드롭다운 목록을 클릭합니다.

    • 에서 선택이 나타나면 프로젝트를 선택합니다.

      프로젝트 ID와 프로젝트 번호가 프로젝트 대시보드 프로젝트 정보 카드에 표시됩니다.

  6. 역할 선택 드롭다운에서 Secret Manager를 선택한 후 Secret Manager 보안 비밀 접근자를 선택합니다.

gcloud CLI

gcloud secrets add-iam-policy-binding my-secret \
    --member="serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

여기서 PROJECT-NUMBER는 프로젝트의 프로젝트 번호입니다.

프로젝트 번호를 찾으려면 다음 안내를 따르세요.

  • Google Cloud 콘솔의 대시보드 페이지로 이동합니다.

    대시보드 페이지로 이동

  • 페이지 상단에서 선택 드롭다운 목록을 클릭합니다.

  • 에서 선택이 나타나면 프로젝트를 선택합니다.

    프로젝트 ID와 프로젝트 번호가 프로젝트 대시보드 프로젝트 정보 카드에 표시됩니다.

원격 저장소 만들기

다음 명령어를 실행하여 Docker Hub 사용자 인증 정보로 us-central1 위치에 quickstart-docker-hub-remote라는 Artifact Registry 원격 저장소를 만듭니다.

gcloud artifacts repositories create quickstart-docker-hub-remote \
    --project=PROJECT_ID \
    --repository-format=DOCKER  \
    --location=us-central1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-docker-repo=DOCKER-HUB \
    --remote-username=USERNAME \
    --remote-password-secret-version=projects/PROJECT/secrets/my-secret/versions/1

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

  • quickstart-docker-hub-remote는 저장소 이름입니다. 프로젝트의 저장소 위치마다 저장소 이름이 고유해야 합니다.
  • PROJECT_ID는 프로젝트 ID입니다. 이 플래그를 생략하면 현재 프로젝트 또는 기본 프로젝트가 사용됩니다.
  • us-central1은 저장소의 리전 또는 멀티 리전 위치입니다. 기본값을 설정하는 경우 이 플래그를 생략할 수 있습니다. 지원되는 저장소 위치 목록을 보려면 gcloud artifacts locations list 명령어를 실행합니다.
  • "Remote Docker repository"는 선택사항으로, 저장소의 설명입니다. 저장소 설명은 암호화되지 않으므로 민감한 정보는 포함하지 마세요.
  • "Docker Hub"는 이 원격 저장소의 외부 저장소 구성에 대한 설명입니다(선택사항).
  • DOCKER-HUB는 원격 저장소 업스트림을 공개 Docker Hub 업스트림으로 설정합니다.
  • USERNAME는 Docker Hub 사용자 이름입니다.
  • projects/PROJECT/secrets/my-secret/versions/1은 Docker Hub 개인 액세스 토큰을 저장하기 위해 만든 보안 비밀 버전입니다.

Artifact Registry는 저장소를 만들고 저장소 목록에 추가합니다.

Docker 인증 구성

이미지를 푸시하거나 가져오려면 먼저 Docker가 Artifact Registry에 대한 요청을 인증하는 데 Google Cloud CLI를 사용하도록 구성해야 합니다.

  1. Docker 명령어를 실행할 사용자로 gcloud CLI에 로그인합니다.

    gcloud auth login
    
  2. us-central1 리전의 Docker 저장소에 인증을 설정하려면 다음 명령어를 실행합니다.

    gcloud auth configure-docker us-central1-docker.pkg.dev
    

    이 명령어는 Docker 구성을 업데이트합니다. 이제 Google Cloud 프로젝트의 Artifact Registry와 연결하여 이미지를 내보내고 가져올 수 있습니다.

다른 인증 방법에 대한 자세한 내용은 인증 방법을 참조하세요.

원격 저장소로 이미지 가져오기

  1. Docker 명령어를 실행할 사용자로 gcloud CLI에 로그인합니다.

    gcloud auth login
    
  2. 다음 명령어를 사용하여 Docker Hub의 이미지를 머신으로, 원격 저장소로 가져옵니다.

    docker pull us-central1-docker.pkg.dev/PROJECT/quickstart-docker-hub-remote/busybox:latest
    

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

    • us-central1은 원격 저장소 위치입니다.
    • us-central1-docker.pkg.dev는 만든 Docker 저장소의 호스트 이름입니다.
    • PROJECT는 Google Cloud 프로젝트 ID입니다. 프로젝트 ID에 콜론(:)이 포함되어 있으면 도메인 범위 프로젝트를 참조하세요.
    • quickstart-docker-hub-remote는 만든 저장소의 ID입니다.
    • busybox는 Docker Hub에서 quickstart-docker-hub-remote로 가져올 이미지의 이름입니다.
    • latest는 Docker Hub에서 가져올 태그가 지정된 이미지 버전입니다.

    이미지를 머신에 가져와서 원격 저장소에 캐시합니다. 태그가 지정된 동일한 이미지를 다시 가져오면 원격 저장소에서 가져옵니다. Docker Hub 사용자 인증 정보가 사용됩니다.

  3. 원격 저장소에 저장된 아티팩트를 나열합니다.

    gcloud artifacts packages list \
        --location=us-central1 \
        --repository=quickstart-docker-hub-remote
    

    다음과 유사한 결과가 출력됩니다.

    Listing items under project my-project, location us-central1, repository quickstart-docker-hub-remote.
    
    PACKAGE: busybox
    CREATE_TIME: 2023-06-19T18:59:09
    UPDATE_TIME: 2023-06-19T18:59:10
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

저장소 삭제

프로젝트를 보존하고 저장소 리소스만 삭제하려면 이 섹션의 단계를 따르세요. 전체 프로젝트를 삭제하려면 프로젝트 삭제의 단계를 수행합니다.

저장소를 삭제하기 전에, 보관할 이미지를 다른 위치에서 사용할 수 있는지 확인합니다.

저장소를 삭제하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 저장소 페이지를 엽니다.

    저장소 페이지 열기

  2. 저장소 목록에서 quickstart-docker-hub-remote 저장소를 선택합니다.

  3. 삭제를 클릭합니다.

gcloud

quickstart-docker-hub-remote 저장소를 삭제하려면 다음 명령어를 실행합니다.

gcloud artifacts repositories delete quickstart-docker-hub-remote \
    --location=us-central1

프로젝트 삭제

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계