Dockerfile을 사용한 Clair 컨테이너 이미지 구축
Clair는 컨테이너 취약점에 대한 오픈 소스 정적 분석 도구로, 컨테이너 이미지를 스캔하여 내부의 알려진 취약점을 감지하는 데 사용됩니다. 그 주요 특징은 다음과 같습니다:
-
다양한 지원 형식 Clair는 Docker, OCI, RHEL OCI 등 일반적인 리눅스 컨테이너 이미지 형식을 분석할 수 있습니다.
-
정적 분석 네트워크 기반 또는 런타임 스캐닝과 달리 Clair는 정적 분석 접근 방식을 사용하여 컨테이너를 시작할 필요 없이 컨테이너 이미지 파일만으로 스캔을 완료할 수 있습니다.
-
연속 모니터링 Clair는 컨테이너 이미지의 취약점 상태를 지속적으로 모니터링하며 새로운 취약점 업데이트를 즉시 감지하여 보고합니다.
-
플러그인 아키텍처 Clair는 타사 데이터 소스 플러그인 설치를 지원하여 더 많은 유형의 컨테이너 이미지와 소프트웨어 패키지 형식을 지원할 수 있습니다.
-
유연한 구성 특정 취약점을 무시하거나 스캔 심각도 수준을 설정하는 등의 구성을 사용자 정의할 수 있습니다.
-
컨테이너화된 배포 Clair 자체가 컨테이너 애플리케이션이며 컨테이너를 통해 빠르게 배포하고 확장할 수 있습니다.
이 글은 Dockerfile을 사용하여 Clair 이미지를 구축하는 방법과 이미지 구축 과정의 각 단계를 이해하는 방법에 대해 안내합니다.
Dockerfile 분석
FROM golang:alpine as builder
이 줄은 builder
라는 이 름의 빌드 단계를 정의하고 기본 이미지로 golang:alpine
을 사용합니다. 이는 Go와 그 도구 체인을 사용하여 Clair의 소스 코드를 컴파일하기 위한 것입니다.
RUN apk --no-cache add \
ca-certificates \
git \
make
Clair 컴파일에 필요한 종속성(ca-certificates
, git
, make
)을 설치합니다.
ENV PATH /go/bin:/usr/local/go/bin:$PATH
ENV GOPATH /go
Go 관련 환경 변수 PATH
와 GOPATH
를 설정합니다.
RUN go get github.com/quay/clair/cmd/clair || true
go get
명령어를 사용하여 Clair 소스 저장소를 가져옵니다.
ENV CLAIR_VERSION v2.1.4
컴파일할 Clair 버전을 v2.1.4
로 지정합니다.
WORKDIR /go/src/github.com/quay/clair
RUN git checkout "${CLAIR_VERSION}"
작업 디렉토리를 Clair 소스 디렉토리로 변경하고 지정된 버전의 코드를 체크아웃합니다.
RUN go install ./cmd/clair
clair
명령줄 도구를 $GOPATH/bin
디렉토리에 컴파일하고 설치합니다.
FROM alpine:latest
새로운 빌드 단계로, 기본 이미지는 alpine:latest
입니다.
RUN apk --no-cache add \
ca-certificates \
git \
rpm \
xz
Clair를 실행하는 데 필요한 종속성(rpm
및 xz
등)을 추가합니다.
COPY --from=builder /go/bin/clair /usr/bin/clair
컴파일된 clair
실행 파일을 builder
단계에서 새 이미지로 복사합니다.
ENTRYPOINT ["clair"]
컨테이너 엔트리포인트를 clair
명령으로 설정합니다.
완성된 Dockerfile 스크립트
FROM golang:alpine as builder
RUN apk --no-cache add \
ca-certificates \
git \
make
ENV PATH /go/bin:/usr/local/go/bin:$PATH
ENV GOPATH /go
RUN go get github.com/quay/clair/cmd/clair || true
ENV CLAIR_VERSION v2.1.4
WORKDIR /go/src/github.com/quay/clair
RUN git checkout "${CLAIR_VERSION}"
RUN go install ./cmd/clair
FROM alpine:latest
RUN apk --no-cache add \
ca-certificates \
git \
rpm \
xz
COPY --from=builder /go/bin/clair /usr/bin/clair
ENTRYPOINT [ "clair" ]
요약
이 Dockerfile을 통해 Clair 실행 파일의 컴파일과 최소한의 이미지 구축을 완료했습니다. 다음 명령을 사용하여 이미지를 빌드할 수 있습니다:
docker build -t myclair:latest .
빌드가 완료되면, 이 이미지를 사용하여 컨테이너 스캐닝을 위한 Clair 서비스를 시작할 수 있습니다. Clair는 주로 컨테이너 환경에서 사용되며, 정적 분석을 통해 알려진 취약점을 감지함으로써 동적 런타임 스캐닝을 보완하고, 컨테이너 애플리케이션의 보안을 종합적으로 강화합니다.