Docker & CI/CD - 특강
# 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 : 이미지 최적화 자동 수행