본문 바로가기
개발/Docker&kubernetes

Distroless 이미지로 안전하고 최적화된 이미지 생성

by 궁즉변 변즉통 통즉구 2023. 3. 13.
반응형

Docker 빌드를 할 때 베이스 이미지로 이미지 경량화를 위해 Alpine이미지를 많아 사용해왔다. 초경량을 위해서는 scratch도 있긴 하지만 이는 너무 row레벨이고 언어별로 사용하는데 제약이 많다. Distroless 이미지를 사용하면 Alpine보다 좀 더 경량화된 이미지를 생성할 수 있고 보안적으로도 좀 더 안전한 이미지를 생성할 수 있다. 

 

Distroless 이미지는 Google에서 제공하는 이미지로써 작성한 어플리케이션과 런타임 종석성만을 포함하고 있다. 그리고 표준 Linux 배포판에서 볼 수 있는 yum과 같은 Package Manager, Shell, 기타 프로그램들이 포함되어 있지 않아서 이미지를 경량화 할 수 있고, 불필요한 프로그램들이 없어서 이미지 보안적으로 장점을 가질 수 있다.

 

사용 예시를 보면 간단히 아래와 같다. Distroless 이미지를 잘 사용하기 위해서는 Docker의 Multi Stage 빌드를 활용하는 것이 좋다.

FROM golang:1.19-alpine as build
WORKDIR /app
COPY src/go.mod src/hello.go ./
RUN go build

FROM gcr.io/distroless/static-debian11
COPY --from=build /app/hello /app/
CMD [ "/app/hello" ]

 

동일한 어플리케이션으로 간단히 테스트를 해봤을 때 실제 빌드되는 어플리케이션의 size에 따라 다르겠지만 데모 어플리케이션에서는 아래와 같은 결과를 얻었다. 

 

아래 사이트에 가면 사용가능한 Distroless 이미지들과 example들을 확인할 수 있다. 현재 debian11 기준으로 python, java, nodejs 등 언어 별로 이미지를 제공해주고 있다. 자세한 내용은 아래 사이트에서 확인해보자

 

GitHub - GoogleContainerTools/distroless: 🥑 Language focused docker images, minus the operating system.

🥑 Language focused docker images, minus the operating system. - GitHub - GoogleContainerTools/distroless: 🥑 Language focused docker images, minus the operating system.

github.com

 

 

반응형

댓글