Docker 이미지 직접 사용¶
평소에는 scan-sbom.sh 스크립트 사용을 권장합니다. 스크립트가 언어 감지와 이미지 선택, 볼륨 마운트를 대신 처리하기 때문입니다. 이 문서는 스크립트를 둘 수 없는 환경(CI 러너, 쿠버네티스 잡 등)에서 이미지를 docker run으로 직접 호출하는 방법을 설명합니다.
이미지와 태그¶
| 이미지 | 용도 |
|---|---|
ghcr.io/sktelecom/bomlens |
스캔과 후처리 (대표 이름) |
ghcr.io/sktelecom/sbom-generator, ghcr.io/sktelecom/sbom-scanner |
같은 이미지의 별칭 (이전 이름, 같은 다이제스트) |
ghcr.io/sktelecom/sbom-scanner-firmware |
펌웨어 분석용 (GPL 도구 포함, opt-in) |
latest와 버전 태그를 제공하며, linux/amd64와 linux/arm64를 지원합니다. 이미지는 cosign으로 서명되어 발행됩니다.
이미지에 들어 있는 것¶
언어 toolchain이 없는 경량 이미지(python 3.12 slim 기반)입니다. 소스 스캔의 전이 의존성 해석은 스크립트가 cdxgen 언어별 이미지를 따로 받아 처리합니다. 구조는 아키텍처를 참고하세요.
| 도구 | 버전 | 역할 |
|---|---|---|
| syft | v1.18.1 | 이미지, 바이너리, 디렉터리 스캔 |
| Trivy | v0.70.0 | 취약점 보고서 |
| cosign | v2.4.1 | SBOM 서명 |
| jq | — | SBOM 정규화와 고지문 생성 |
| ScanCode Toolkit | 32.3.0 | 정밀 라이선스 탐지 (opt-in 빌드에만 포함) |
도구 버전은 docker/Dockerfile의 ARG로 고정됩니다.
직접 실행¶
분석 모드는 환경 변수 MODE로 지정합니다. 모든 예시는 산출물을 현재 디렉터리에 남기고 업로드는 하지 않습니다(UPLOAD_ENABLED=false).
Docker 이미지 분석¶
docker run --rm \
-v "$(pwd)":/host-output \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=IMAGE \
-e TARGET_IMAGE="nginx:alpine" \
-e UPLOAD_ENABLED=false \
-e HOST_OUTPUT_DIR=/host-output \
-e PROJECT_NAME="Nginx" \
-e PROJECT_VERSION="alpine" \
ghcr.io/sktelecom/bomlens:latest
바이너리 파일 분석¶
docker run --rm \
-v "$(pwd)":/target \
-v "$(pwd)":/host-output \
-e MODE=BINARY \
-e TARGET_FILE=/target/firmware.bin \
-e UPLOAD_ENABLED=false \
-e HOST_OUTPUT_DIR=/host-output \
-e PROJECT_NAME="Firmware" \
-e PROJECT_VERSION="1.0" \
ghcr.io/sktelecom/bomlens:latest
소스 디렉터리 분석¶
docker run --rm \
-v "$(pwd)":/src \
-v "$(pwd)":/host-output \
-e MODE=SOURCE \
-e UPLOAD_ENABLED=false \
-e HOST_OUTPUT_DIR=/host-output \
-e PROJECT_NAME="MyApp" \
-e PROJECT_VERSION="1.0.0" \
ghcr.io/sktelecom/bomlens:latest
직접 실행의 SOURCE 모드는 컨테이너 안에서 syft가 패키지 매니페스트를 읽는 방식이라 직접 의존성만 잡힐 수 있습니다. 전이 의존성까지 필요하면 cdxgen 언어 이미지를 라우팅하는 scan-sbom.sh를 쓰세요.
고지문과 보고서까지 한 번에¶
직접 실행에서는 고지문과 보안 보고서가 기본으로 꺼져 있습니다. 다음 변수를 켜면 CLI의 --all과 같은 산출물이 나옵니다.
docker run --rm \
-v "$(pwd)":/host-output \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=IMAGE \
-e TARGET_IMAGE="nginx:alpine" \
-e GENERATE_NOTICE=true \
-e GENERATE_SECURITY=true \
-e GENERATE_REPORT=true \
-e UPLOAD_ENABLED=false \
-e HOST_OUTPUT_DIR=/host-output \
-e PROJECT_NAME="Nginx" \
-e PROJECT_VERSION="alpine" \
ghcr.io/sktelecom/bomlens:latest
환경 변수¶
| 환경 변수 | 필수 | 기본값 | 설명 |
|---|---|---|---|
MODE |
O | POSTPROCESS |
분석 모드: SOURCE, IMAGE, BINARY, ROOTFS, FIRMWARE, ANALYZE |
PROJECT_NAME |
O | — | 프로젝트 이름 |
PROJECT_VERSION |
O | — | 프로젝트 버전 |
TARGET_IMAGE |
모드별 | — | IMAGE 모드의 이미지명 (docker.sock 마운트 필요) |
TARGET_FILE |
모드별 | — | BINARY/FIRMWARE 모드의 파일 경로 (컨테이너 내부 경로) |
TARGET_DIR |
모드별 | — | ROOTFS 모드의 디렉터리 경로 |
UPLOAD_ENABLED |
— | true |
false면 업로드 없이 로컬 저장만 (CLI --generate-only와 동일) |
HOST_OUTPUT_DIR |
— | — | 산출물을 복사할 마운트 경로 |
GENERATE_NOTICE |
— | false |
오픈소스 고지문 생성 (CLI --notice) |
GENERATE_SECURITY |
— | false |
Trivy 보안 보고서 생성 (CLI --security) |
GENERATE_REPORT |
— | false |
오픈소스위험분석보고서 생성 (CLI 기본값과 달리 직접 실행은 꺼짐) |
API_KEY, API_URL |
업로드 시 | — | trustedoss-portal(Dependency-Track 호환) 업로드 인증 |
CLI 플래그와 환경 변수의 전체 대응은 아키텍처의 플래그 매핑을 참고하세요.
이미지 빌드와 배포¶
이미지를 직접 빌드하거나 멀티 플랫폼으로 발행하는 절차는 기여자용 docker/README에 있습니다.