본문 바로가기

Server Infra/Kubernetes

Docker Image 사이즈 튜닝

728x90

최근 업무를 진행하는 도중 연차가 낮은 분들이나 개발을 하지만 Container환경에 미숙하신 분들이 이런 실수를 많이 하더군요. 그래서 내용을 정리해 놓습니다.

 

간혹 아래같이 각각 package를 따로 RUN 명령어로 배치하는 경우가 있습니다. (가독성 때문이 아닐까 싶음)

RUN [페키지 업데이트]
RUN [페키지 인스톨]
RUN [실행 쉘]

물론 케이스별로 위와 같은 커멘드도 사용할 수 밖에 없지만 기왕이면

RUN apt-get update && apt-get install -y\
         [package-one] \
         [package-two]
   && rm -rf /var/lib/apt/lists/*

위처럼 && 커멘드로 하시거나 배포를 위해 패키지를 미리 설치해서 만들어둔 이미지를 사용하시는게 좋습니다.

 

이유는 Container에서 사용하는 유니온파일시스템이라는 놈이 문제죠.

일단 Docker는 Overlay FS라는걸 사용하는데 이게 유니온 파일시스템을 지원하는 파일시스템입니다. 위처럼 Layer 별로 변경된 부분을 저장하죠.

쉽게 말하면 Git의 버전관리..? Branch??? 랑 비슷하달까요...? 증분 백업이라고 생각하면 되려나...

아무튼 저 RUN을 나눠서 사용하면 그만큼 Layer가 나눠집니다. 그러다 보니 저장공간이 엄청 늘어나죠.

최대한 Layer를 줄이는게 핵심이랄까요?

 

그래서 DockerFile을 만들때 최대한 RUN이나 CMD를 압축하거나

차라리 따로 Volume을 마운트해서 설정파일을 사용하거나

미리 SSH로 붙어서 설치를 다 한뒤에 이미지를 Commit하여 골든이미지를 만드는 방식이 모범사례같습니다.

 

728x90