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)
기본적으로 도구는 이미지 레퍼런스(참조)를 기대해요. 예를 들면:
rediscurlimages/curl:7.87.0mcr.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