최소 또는 Distroless 이미지
최소 또는 Distroless 이미지 (Minimal or distroless images)
최소(distroless) 이미지가 무엇이고 어떤 이점·트레이드오프를 주는지 알아볼게요.
출처: 문서
본문
최소 이미지(때로는 distroless 이미지라고 함)는 패키지 매니저, 셸, 심지어 밑바탕 OS 배포판 같은 불필요한 구성 요소를 제거한 컨테이너 이미지예요. Docker Hardened Images(DHI)는 취약점을 줄이고 안전한 소프트웨어 전달을 시행하기 위해 이 최소 접근을 채택해요. Docker Official Images와 Docker Verified Publisher Images는 최소성과 보안에 대해 유사한 모범 사례를 따르지만, 더 넓은 사용 사례와의 호환성을 보장하기 위해 그렇게 많이 제거하지 않을 수 있어요.
최소 또는 distroless 이미지란 (What are minimal or distroless images?)
전통적인 컨테이너 이미지는 전체 OS를 포함하며, 종종 애플리케이션 실행에 필요한 것보다 많아요. 반대로 최소 또는 distroless 이미지는 다음만 포함해요:
- 애플리케이션 바이너리
- 그 런타임 의존성(예: libc, Java, Python)
- 명시적으로 요구되는 구성이나 메타데이터
일반적으로 제외해요:
- OS 도구(예:
ls,ps,cat) - 셸(예:
sh,bash) - 패키지 매니저(예:
apt,apk) - 디버깅 유틸리티(예:
curl,wget,strace)
Docker Hardened Images는 이 모델을 기반으로 더 작고 안전한 런타임 표면을 보장해요.
얻는 것 (What you gain)
| 이점 | 설명 |
|---|---|
| 더 작은 공격 표면 | 구성 요소가 적다는 것은 취약점이 적고 CVE에 덜 노출된다는 뜻 |
| 더 빠른 시작 | 더 작은 이미지 크기는 더 빠른 풀·시작 시간을 의미 |
| 개선된 보안 | 셸과 패키지 매니저가 없어 손상되어도 공격자가 할 수 있는 일을 제한 |
| 더 나은 규정 준수 | 특히 SBOM과 증명으로 감사·검증이 더 쉬움 |
공통 트레이드오프 다루기 (Addressing common tradeoffs)
최소 및 distroless 이미지는 강력한 보안 이점을 제공하지만, 컨테이너 작업 방식을 바꿀 수 있어요. Docker Hardened Images는 생산성을 유지하면서 보안을 강화하도록 설계됐어요.
| 우려 사항 | Docker Hardened Images가 돕는 방식 |
|---|---|
| 디버깅 가능성 | 강화된 이미지는 기본적으로 셸과 CLI 도구를 제외해요. Docker Debug를 사용해 원래 컨테이너를 수정하지 않고 문제 해결용 디버그 사이드카를 일시적으로 붙이세요. |
| 친숙함 | DHI는 Alpine과 Debian 변형을 포함한 여러 기본 이미지를 지원하므로, 강화 관행의 이점을 누리면서 익숙한 환경을 고를 수 있어요. |
| 유연성 | 런타임 불변성이 컨테이너를 안전하게 해줘요. 변경을 제어하려면 멀티 스테이지 빌드와 CI/CD를 사용하고, 개발 중에는 선택적으로 dev 중심 기본 이미지를 사용하세요. |
최소성과 실용적 도구의 균형을 맞춤으로써 Docker Hardened Images는 보안이나 신뢰성을 희생하지 않고 현대 개발 워크플로우를 지원해요.
최소 이미지 사용 모범 사례 (Best practices for using minimal images)
- 멀티 스테이지 빌드로 빌드 시점과 런타임 환경을 분리
- 대화형 조사 대신 CI 파이프라인으로 이미지 동작 검증
- Dockerfile에 런타임별 의존성을 명시적으로 포함
- Docker Scout로 최소 이미지에서도 CVE를 지속적으로 모니터링
Docker Hardened Images를 통해 최소 또는 distroless 이미지를 채택함으로써 자동화, 명확성, 위험 감소를 위해 설계된 더 안전하고 예측 가능하며 프로덕션 준비된 컨테이너 환경을 얻을 수 있어요.