카테고리 없음

Docker & CI/CD - 특강

qordpsem 2025. 3. 20. 20:11

# Docker 경량화 및 최적화

 

도커의 사용 목적

- 어디서나 실행 가능

- 빠른 배포 및 확장성

- 버전 관리 및 롤백

- 가벼운 컨테이너

 

도커 경량화 및 최적화의 필요성

- 도커 이미지 크기에 따른 성능 / 비용 차이 : 배포 및 실행 속도 차이 / 스토리지 비용 증가 및 네트워크 트래픽 증가

- 불필요한 레이어와 빌드 시간 단축 : CI/CD 파이프라인 속도 향상

 

경량화 및 최적화 방법

- 가벼운 베이스 이미지 (OS 이미지) 사용 : Alpine, Debian Slim, Distroless

- 다단계 빌드 활용

- 불필요한 파일 및 레이어 줄이기

- 불필요한 패키지 제거 및 이미지 압축

 

 

Alpine : 초 경량이지만 최소한의 유틸만 제공하기 때문에 디버깅이 어려움 

  -> 매우 작은 컨테이너가 필요할때 / 보안 패치 빠르게 필요할때

  -> 자바 기반 앱에서 사용하지 않음

 

Debian Slim : 경량, 디버깅 가능, 일반적인 웹 어플리케이션에서 사용

  -> 스크립트 기반 언어 사용할때 / 호환성과 경량화 둘 다 고려할때 사용 / 일반적으로 사용됨

  -> 보안이 중요할때 사용하지 않음

 

Distorless : 경량, 불필요한 파일 전부 제거하여 공격 표면 최소화, 디버깅 거의 불가능

  -> 보안 중요할때 사용 / 실행만 하면 되는 앱일때 사용

  -> 디버깅이 필요할때 사용하지 않음

 

 

다단계 빌드 (Multi-Stage Build) : 하나의 도커 파일에서 여러 개의 단계를 사용하여 빌드용 컨테이너와 실행용 컨테이너 분리

 

불필요한 파일 : gitignore 활용, 캐시 없애기

 

불필요한 레이어 : Run 한번만 사용할수있게 합치기

 

Debug symbols 및 필요없는 파일 제거 (보안 취약점도 감소)

 

RUN apt-get install -y python3 대신

RUN apt-get install -y --no-install-?? python3 

 

-squash : 여러개의 레이어를 하나로 병합하여 크기 감소

docker-slim : 이미지 최적화 자동 수행