docker scout compare

docker scout compare

docker scout compare는 두 이미지를 분석해 차이를 보여 주는 명령이에요. 같은 이미지의 서로 다른 버전을 비교해서 무엇이 바뀌었는지 확인하고 싶을 때 써요. (실험적 기능)

출처: 문서

본문

docker scout compare 명령은 두 이미지를 분석하고 비교 결과를 표시해요. 이 명령은 실험적이며 동작이 향후 바뀔 수 있어요.

이 명령의 주된 용도는 같은 이미지의 두 버전을 비교하는 거예요. 예를 들어 새 이미지를 빌드했을 때 프로덕션에서 실행 중인 버전과 비교하는 경우가 있어요. 이미지를 지정하지 않으면 가장 최근에 빌드된 이미지를 비교 대상으로 사용해요.

지원되는 아티팩트 유형은 다음과 같아요:

  • 이미지 (Images)
  • OCI 레이아웃 디렉터리 (OCI layout directories)
  • docker save로 만든 tarball 아카이브 (Tarball archives)
  • 로컬 디렉터리 또는 파일 (Local directory or file)

기본적으로 도구는 이미지 레퍼런스(참조)를 기대해요. 예를 들면:

  • redis
  • curlimages/curl:7.87.0
  • mcr.microsoft.com/dotnet/runtime:7.0

분석하려는 아티팩트가 OCI 디렉터리·tarball 아카이브·로컬 파일이나 디렉터리이거나, 이미지가 어디서 해석될지(레지스트리 조회 여부) 제어하고 싶다면 레퍼런스 앞에 다음 접두사 중 하나를 붙여야 해요:

  • image:// (기본값) 로컬 이미지를 사용하거나, 없다면 레지스트리 조회로 폴백해요
  • local:// 로컬 이미지 스토어의 이미지를 사용해요 (레지스트리 조회 안 함)
  • registry:// 레지스트리의 이미지를 사용해요 (로컬 이미지 사용 안 함)
  • oci-dir:// OCI 레이아웃 디렉터리를 사용해요
  • archive:// docker save로 만든 tarball 아카이브를 사용해요
  • fs:// 로컬 디렉터리 또는 파일을 사용해요
  • sbom:// SPDX predicate가 있는 SPDX 파일 또는 in-toto attestation 파일, syft json SBOM 파일을 사용해요

사용법 (Usage)

docker scout compare --to IMAGE|DIRECTORY|ARCHIVE [IMAGE|DIRECTORY|ARCHIVE]

별칭 (Aliases)

별칭은 긴 명령 대신 쓸 수 있는 짧고 기억하기 쉬운 대안이에요.

docker scout diff

참고: 이 명령은 실험적(experimental) 기능이에요. 실험적 기능은 테스트와 피드백을 위한 것이며, 기능이나 설계가 릴리스 사이에 예고 없이 바뀌거나 향후 릴리스에서 완전히 제거될 수 있어요.

옵션 (Options)

옵션 기본값 설명
-x, --exit-on 더 나쁘거나 변경된 경우 작업 단계를 실패시킬 조건의 쉼표 구분 목록이에요. 옵션: vulnerability, policy, package
--format text 생성된 취약점 보고서의 출력 형식이에요: text(기본 출력, 터미널에 따라 색상 유무가 다른 일반 텍스트), markdown(Markdown 출력), json(JSON 출력)
--hide-policies 출력에서 정책 상태를 숨겨요
--ignore-base 기본 이미지에서 도입된 CVE를 걸러 내요
--ignore-suppressed 지정된 예외 범위를 기준으로 Scout 예외에 있는 CVE를 걸러 내요
--ignore-unchanged 변경되지 않은 패키지를 걸러 내요
--multi-stage 다단계 Docker 빌드의 패키지를 보여 줘요
--only-fixed 수정 가능한 CVE로 걸러 내요
--only-package-type 패키지 유형의 쉼표 구분 목록이에요 (예: apk, deb, rpm, npm, pypi, golang 등)
--only-policy 평가할 정책의 쉼표 구분 목록이에요
--only-severity CVE를 필터링할 심각도의 쉼표 구분 목록이에요 (critical, high, medium, low, unspecified)
--only-stage 다단계 Docker 빌드 단계 이름의 쉼표 구분 목록이에요
--only-unfixed 수정되지 않은 CVE로 걸러 내요
--only-vex-affected 상태가 not affected가 아닌 VEX 문으로 CVE를 필터링해요
--org Docker 조직의 namespace예요
-o, --output 보고서를 파일로 써요
--platform 분석할 이미지의 플랫폼이에요
--policy-bundle 평가할 정책 번들의 OCI 참조예요 (반복 가능)
--policy-config 정책 활성화와 입력을 구성하는 JSON 파일의 경로 또는 http(s) URL이에요
--policy-dir 로컬 .rego 정책 파일 디렉터리의 경로예요 (반복 가능)
--policy-file .rego 정책 파일의 경로 또는 http(s) URL이에요 (반복 가능)
--ref 제공된 tarball이 여러 참조를 포함하면 사용할 참조예요. archive에서만 사용할 수 있어요
--to 비교 대상이 될 이미지, 디렉터리 또는 아카이브예요
--to-env 비교할 환경의 이름이에요
--to-latest 비교할 가장 최근에 처리된 이미지예요
--to-ref 제공된 tarball이 여러 참조를 포함하면 사용할 참조예요. archive에서만 사용할 수 있어요
--vex-author [] 수락할 VEX 문 작성자 목록이에요
--vex-location VEX 문이 들어 있는 디렉터리 또는 파일의 위치예요

예제 (Examples)

가장 최근에 빌드된 이미지를 최신 태그와 비교하기

$ docker scout compare --to namespace/repo:latest

로컬 빌드를 레지스트리의 같은 태그와 비교하기

$ docker scout compare local://namespace/repo:latest --to registry://namespace/repo:latest

기본 이미지 무시하기

$ docker scout compare --ignore-base --to namespace/repo:latest namespace/repo:v1.2.3-pre

Markdown 출력 생성하기

$ docker scout compare --format markdown --to namespace/repo:latest namespace/repo:v1.2.3-pre

maven 패키지만 비교하고, maven 패키지의 critical 취약점만 표시하기

$ docker scout compare --only-package-type maven --only-severity critical --to namespace/repo:latest namespace/repo:v1.2.3-pre

두 이미지의 모든 정책 결과 표시하기

docker scout compare --to namespace/repo:latest namespace/repo:v1.2.3-pre

더 알아보기 (Learn more)