개요
- "Distroless" Container Images
- Distroless 컨테이너 이미지, Distroless 이미지, 디스트로리스
- 애플리케이션을 실행하는 데 필요한 최소한의 런타임과 라이브러리만 포함한다.
- 애플리케이션과 해당 런타임 종속성만 포함된다.
- 표준 Linux 배포판에 흔히 있는 패키지 관리자, 쉘, 기타 프로그램이 들어 있지 않다.
- Google이 제공한다.
# Start by building the application.
FROM golang:1.17-bullseye as build
WORKDIR /go/src/app
ADD . /go/src/app
RUN go get -d -v ./...
RUN go build -o /go/bin/app
# Now copy it into our base image.
FROM gcr.io/distroless/base-debian11
COPY --from=build /go/bin/app /
CMD ["/app"]
static과 base
| 구분 | static ★ | base |
|---|---|---|
| 용도 | 정적으로 연결된 바이너리 실행용 | 동적으로 연결된 애플리케이션 실행용 |
| 라이브러리 | 동적 링크 라이브러리(glibc, musl 등) 미포함 | glibc 및 필수 동적 라이브러리 포함 |
| 보안 | 제한된 실행환경 (최고 보안) | 라이브러리 포함으로, 약간 유연한 실행환경 |
| 이미지 크기 | 매우 작음 (최소 크기) | 라이브러리 포함으로, static보다는 큼 |
- 일반적으로 base 이미지라고 하면 가장 작은 이미지라고 할 수 있는데, Distroless에서는 그렇지 않다.
- 동적 연결 라이브러리가 필요하지 않다면 static 사용을 우선 고려하자.