[Supply Chain Security] Minimize base image footprint

IMKUNYOUNG·2024년 6월 27일
0

CKS

목록 보기
59/70

이번 글에서는 Docker 이미지의 크기를 최소화하는 방법에 대해 다뤄보겠습니다.

베이스 이미지란?

베이스 이미지는 다른 이미지의 기반이 되는 이미지로, 모든 Docker 이미지의 출발점이 됩니다. 예를 들어, 여러분의 커스텀 웹 애플리케이션이 httpd 이미지로부터 빌드된다면, 이 httpd 이미지는 여러분의 애플리케이션 이미지의 부모 이미지가 됩니다. 일반적으로 베이스 이미지와 부모 이미지라는 용어는 혼용될 수 있습니다.

베이스 이미지의 예시

  • httpd 이미지: 이 이미지는 Debian 이미지를 기반으로 하여 빌드됩니다.
  • Debian 이미지: scratch 이미지로부터 빌드됩니다. Scratch 이미지는 아무것도 없는 빈 이미지를 의미합니다.

베이스 이미지와 부모 이미지의 차이

기술적으로 베이스 이미지는 Docker 이미지의 시작점이고, 부모 이미지는 다른 이미지를 기반으로 빌드된 이미지를 의미합니다 이 글에서는 두 용어를 동일하게 사용하겠습니다.

Docker 이미지 빌드 시 모범 사례

Docker 이미지를 빌드할 때 따라야할 몇 가지 모범 사례가 있습니다.

1. 모듈식 이미지 빌드

여러 애플리케이션을 하나의 이미지에 결합하지 마십쇼. 예를 들어, 웹 서버, 데이터베이스, 기타 서비스를 하나의 이미지로 통합하지 말고, 각 서비스별로 별도의 이미지를 만드세요. 이렇게 하면 각 이미지는 자체 라이브러리와 종속성을 가질 수 있고, 다른 애플리케이션에 대해 걱정할 필요가 없습니다.

2. 데이터와 상태 저장

컨테이너 내에 데이터나 상태를 저장하지 마십쇼. 컨테이너는 일시적인 성격을 가지므로, 파괴되고 다시 생성되더라도 데이터가 손실되지 않도록 데이터를 외부 볼륨이나 캐싱 서비스에 저장하세요

3. 적절한 베이스 이미지 선택

자신의 웹 애플리케이션을 빌드할 때, 기존의 베이스 이미지에서 시작하는 것이 좋습니다. 기술적 요구 사항에 맞는 이미지를 선택하세요. 예를 들어, 애플리케이션이 httpd를 필요한다면, httpd 이미지를 사용하세요. 이미지를 선택할 때는 공식 소스에서 제공하는지 확인하고, 최신 상태인지 확인하세요.

4. 이미지 크기 최소화

이미지의 크기를 작게 유지하는 것은 매우 중요합니다. 이렇게 하면 원격 저장소에서 이미지를 더 빠르게 풀링하고, 필요에 따라 인스턴스를 더 쉽게 스핀업할 수 있습니다. 이를 위해 다음과 같은 방법을 사용할 수 있습니다.

  • 최소 버전 사용: 공식 운영 체제의 최소 버전을 베이스 이미지로 사용하세요
  • 필요한 라이브러리만 설치: 애플리케이션 실행에 꼭 필요한 라이브러리 패키지만 설치하고, 불필요한 파일이나 임시 파일을 제거하세요.
  • 불필요한 도구 제거: curl 또는 wget과 같은 도구는 공격자가 컨테이너에 접근할 경우 파일을 다운로드하는 데 사용될 수 있으므로 제거하세요. 패키지 관리자도 제거해야 합니다.

5. 프로덕션 이미지 최소화

개발 환경에는 디버그 도구나 다른 패키지가 필요할 수 있지만, 프로덕션 환경에서는 이러한 도구를 포함하지 않는 것이 좋습니다. 프로덕션 환경을 위해 별도의 이미지를 고려하세요.

Google의 Distroless Docker 이미지

Google의 Distroless Docker 이미지는 애플리케이션 및 런타임 종속성만 포함하고, 패키지 관리자, 셸, 네트워크 도구, 텍스트 편집기 등 불필요한 프로그램을 포함하지 않습니다. 최소 이미지는 공격에 덜 취약하며, 이미지에 포함된 패키지가 적을수록 취약점도 적습니다.

예를 들어, Trivey 도구를 사용하여 httpd 이미지에서 취약점을 스캔하면 최소 124개의 알려진 취약점이 발견되지만, httpd:alpine 베이스 이미지에서는 취약점이 0개로 나타납니다.

마무리

이러한 모범 사례를 따라 Docker 이미지를 최소화하면 빌드 및 풀링 속도가 빨라지고, 보안성이 강화됩니다. 계속해서 이미지를 최적화하고 관리하여 효율적이고 안전한 Docker 환경을 유지하시길 바랍니다.

0개의 댓글