반응형
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 등 언어 별로 이미지를 제공해주고 있다. 자세한 내용은 아래 사이트에서 확인해보자
반응형
'개발 > Docker&kubernetes' 카테고리의 다른 글
Docker 리소스 일괄 삭제(docker system prune)-미사용 Docker 리소스 모두 삭제 (0) | 2023.05.29 |
---|---|
helm upgrade configmap, secret 변경 시 pod 자동 재시작 (0) | 2023.03.20 |
AWS EKS 구성 및 컨테이너 웹 어플리케이션 배포 - 2 (0) | 2023.02.10 |
K3s 인증서 갱신(certificate has expired or is not yet valid) (0) | 2023.01.15 |
Docker Multi Application(여러 어플리케이션) 실행 (0) | 2022.09.06 |
댓글