Docker Scout를 컨테이너 레지스트리와 통합하기

Docker Scout를 컨테이너 레지스트리와 통합하기

docker scout watch는 컨테이너 레지스트리에서 이미지를 인덱싱하고 결과를 Docker Scout로 push하는 장기 실행 CLI 프로세스예요. Amazon ECR, Azure Container Registry, JFrog Artifactory, Harbor, Sonatype Nexus를 포함한 모든 Docker/OCI 호환 레지스트리와 동작해요.

동작 방식 (How it works)

사용자가 제어하는 호스트에서 docker scout watch를 실행해요. 프로세스는 다음을 할 수 있어요.

  • 특정 저장소 또는 전체 레지스트리 감시
  • --all-images로 기존 이미지를 모두 한 번 선택적으로 수집
  • --refresh-registry로 저장소 목록을 주기적으로 갱신
  • 지원하는 레지스트리의 웹훅 콜백을 받아 폴링 대신 거의 실시간 분석 수행

통합 후 Docker Scout는 레지스트리에 push하는 이미지를 자동으로 pull하고 분석해요. 이미지 메타데이터는 Docker Scout 플랫폼에 저장되지만, Docker Scout는 컨테이너 이미지 자체는 저장하지 않아요. Docker Scout가 이미지 데이터를 처리하는 방법에 대한 자세한 내용은 데이터 처리를 참고하세요.

docker scout watch 설정

  1. docker scout watch를 실행할 호스트를 선택하세요.

    호스트는 레지스트리에 네트워크로 접근할 수 있고 인터넷을 통해 Scout API(https://api.scout.docker.com)에 접근할 수 있어야 해요. 웹훅 콜백을 사용한다면 레지스트리도 구성된 포트에서 docker scout watch 호스트에 도달할 수 있어야 해요.

  2. 최신 버전의 Scout를 실행 중인지 확인하세요.

    $ docker scout version
    

    필요하다면 Scout 최신 버전을 설치하세요.

  3. 레지스트리에 Docker를 인증하세요.

    $ docker login <registry-hostname> --username <user> --password <password-or-access-token>
    

    Amazon ECR은 대신 AWS CLI로 인증하세요.

    $ aws ecr get-login-password --region <region> | \
      docker login --username AWS --password-stdin \
      <aws_account_id>.dkr.ecr.<region>.amazonaws.com
    

    사용된 AWS 자격 증명은 대상 레지스트리에 대해 최소한 ecr:GetAuthorizationTokenecr:BatchGetImage 권한이 있어야 해요.

    Azure Container Registry:

    $ docker login <registry-name>.azurecr.io \
      --username <username> \
      --password <password-or-access-token>
    

    [!TIP]

    모범 사례로, 레지스트리에 읽기 전용 접근이 있는 전용 사용자나 토큰을 사용하세요.

  4. Scout 자격 증명을 설정하세요.

    1. 조직 액세스 토큰을 생성하세요. 자세한 내용은 조직 액세스 토큰 만들기를 참고하세요.

    2. 조직 액세스 토큰으로 Docker에 로그인하세요.

      $ docker login --username <your_organization_name>
      

      비밀번호를 묻는 프롬프트가 나타나면 조직 액세스 토큰을 붙여넣으세요.

    3. 로컬 Docker 환경을 조직의 Docker Scout 서비스에 연결하세요.

      $ docker scout enroll <your_organization_name>
      
  5. 기존 이미지를 인덱싱하세요. 한 번만 하면 돼요.

    $ docker scout watch --registry <registry-hostname> --all-images
    
  6. Scout Dashboard에서 이미지를 보고 인덱싱됐는지 확인하세요.

  7. 새 이미지를 지속적으로 감시하세요.

    $ docker scout watch --registry <registry-hostname> --refresh-registry
    

    docker scout watch는 장기 실행 프로세스예요. 백그라운드에서 계속 실행되도록 systemdnohup 같은 시스템 서비스로 실행하세요. 폴링 빈도를 제어하려면 --interval(기본값 60초)을, 범위를 좁히려면 --repository--tag를 사용하세요.

참고: docker scout watch

레지스트리별 옵션

일부 레지스트리는 호스트 이름 외의 추가 구성이 필요하며, 예를 들어 웹훅 콜백용 REST API 엔드포인트나 비표준 저장소 레이아웃 같은 것을 --registry 플래그에 key=value 문자열로 전달해요. type=artifactory, type=harbor, type=nexus용 내장 어댑터가 있고, type=oci 어댑터는 _catalog 엔드포인트를 구현하는 모든 OCI 호환 레지스트리를 다뤄요. 각 유형의 전체 옵션 참조는 docker scout watch를 참고하세요.

다음 예시는 type=artifactory 어댑터를 자세히 살펴봐요. 동등한 Harbor, Nexus, 범용 OCI 예시는 CLI 참조를 보세요.

예시: JFrog Artifactory

type=artifactory 옵션들은 --registry 옵션의 일반 레지스트리 처리를 재정의해요.

키 (Key) 필수 (Required) 설명 (Description)
type artifactory여야 함.
registry Docker/OCI 레지스트리 호스트 이름 (예: example.jfrog.io).
api Artifactory REST API 기본 URL (예: https://example.jfrog.io/artifactory).
repository 감시할 저장소 (--repository 대체).
includes 아니요 포함할 glob (예: */frontend*).
excludes 아니요 제외할 glob (예: */legacy/*).
port 아니요 웹훅 콜백을 수신할 로컬 포트.
subdomain-mode 아니요 true 또는 false; Artifactory의 Docker 레이아웃(subdomain 대 저장소-경로)과 일치.

Artifactory에 인증할 Scout 클라이언트의 자격 증명과, Artifactory가 웹훅 콜백을 인증할 시크릿을 설정하세요.

$ export DOCKER_SCOUT_ARTIFACTORY_API_USER=<user>
$ export DOCKER_SCOUT_ARTIFACTORY_API_PASSWORD=<password-or-access-token>
$ export DOCKER_SCOUT_ARTIFACTORY_WEBHOOK_SECRET=<random-64-128-character-secret>

[!TIP]

모범 사례로, 읽기 전용 접근이 있는 전용 사용자를 만들고 비밀번호 대신 액세스 토큰을 사용하세요. 웹훅 시크릿은 64-128자의 높은 엔트로피 임의 문자열로 생성하세요.

Artifactory별 레지스트리 문자열로 기존 이미지를 인덱싱하세요.

$ docker scout watch --registry \
  "type=artifactory,registry=example.jfrog.io,api=https://example.jfrog.io/artifactory,include=*/frontend*,exclude=*/dta/*,repository=docker-local,port=9000,subdomain-mode=true" \
  --all-images

그런 다음 Artifactory가 웹훅을 호출하도록 구성하세요: Artifactory UI나 REST API에서 이미지 push/업데이트 이벤트용 웹훅을 설정하고, docker scout watch 호스트와 포트를 가리키며 인증을 위해 DOCKER_SCOUT_ARTIFACTORY_WEBHOOK_SECRET을 포함하세요. 자세한 내용은 JFrog Artifactory Webhooks 문서JFrog Artifactory REST API Webhooks 문서를 참고하세요.

마지막으로 장기 실행 감시 프로세스로 --all-images 대신 --refresh-registry로 같은 명령을 실행해 앞으로 새 이미지가 수집되게 하세요.

$ docker scout watch --registry \
  "type=artifactory,registry=example.jfrog.io,api=https://example.jfrog.io/artifactory,include=*/frontend*,exclude=*/dta/*,repository=docker-local,port=9000,subdomain-mode=true" \
  --refresh-registry