paint-brush
Docker 이미지에서 파운드를 줄이는 방법은 무엇입니까?by@infinity
2,195
2,195

Docker 이미지에서 파운드를 줄이는 방법은 무엇입니까?

Rishabh Agarwal4m2024/01/19
Read on Terminal Reader
Read this story w/o Javascript

컨테이너화는 모든 인프라에서 실행하는 데 필요한 모든 파일 및 라이브러리와 함께 애플리케이션의 코드를 번들로 묶는 소프트웨어 배포 프로세스입니다. Docker 이미지를 최적화하면 전체 개발 주기를 가속화할 수 있을 뿐만 아니라 보안 조치도 강화하여 더욱 강력하고 효율적인 소프트웨어 환경을 보장할 수 있습니다.
featured image - Docker 이미지에서 파운드를 줄이는 방법은 무엇입니까?
Rishabh Agarwal HackerNoon profile picture

컨테이너화 ”라고 내가 소프트웨어 개발 산업에 혁명을 일으킨 가장 큰 일에 대해 물었을 때 내 관리자는 분명하게 말했습니다. 그는 컨테이너화가 없었다면 오늘날 소프트웨어의 신속한 확장과 글로벌 배포가 훨씬 더 어려운 과제였을 것이라고 주장했습니다. 오늘날 사용되는 거의 모든 소프트웨어가 다양한 용량의 컨테이너화를 활용한다는 점은 주목할 만하며, 이는 현대 소프트웨어 생태계를 강화하는 데 없어서는 안 될 역할을 강조합니다!


혹시 모르시는 분들을 위해 AWS 홈페이지 에서 정의를 알려드립니다~

 *“Containerisation is a software deployment process that bundles an application's code with all the files and libraries it needs to run on any infrastructure. Traditionally, to run any application on your computer, you had to install the version that matched your machine's operating system.”*


이미지는 컨테이너 생성을 안내하는 청사진과 유사한 컨테이너의 구성 요소 역할을 합니다. 따라서 가볍고 간소화된 컨테이너 이미지를 유지하면 배포 프로세스가 가속화되고 이러한 이미지의 배포가 쉬워집니다. Docker 이미지를 최적화하면 전체 개발 주기를 가속화할 수 있을 뿐만 아니라 보안 조치를 강화하여 더욱 강력하고 효율적인 소프트웨어 환경을 보장할 수 있습니다.


이 기사에서는 효율적인 Docker 이미지를 생성하여 궁극적으로 애플리케이션의 효율성을 향상시키는 다양한 방법을 살펴보겠습니다.

컨테이너당 단일 앱 패키지

컨테이너를 가상 머신(VM)처럼 취급하고 단일 컨테이너 내에 두 개 이상의 애플리케이션을 패키징하는 것은 흔히 저지르는 실수입니다. 컨테이너 크기를 늘리는 동시에 이 방법에는 다른 단점도 있습니다.


컨테이너의 수명은 실행 중인 애플리케이션과 밀접하게 관련되어 있을 것으로 예상됩니다. 컨테이너는 앱이 시작될 때 시작되고 앱이 완료되면 중지되어야 합니다. Docker 및 Kubernetes와 같은 컨테이너 오케스트레이션 솔루션은 컨테이너의 이러한 속성에 크게 의존합니다. 컨테이너가 많은 앱을 실행하는 경우 오케스트레이션 도구가 애플리케이션을 식별하고 다시 시작할 수 없습니다!

캐시를 현명하게 활용하기

이미지는 레이어로 구성되며 Dockerfile의 각 명령은 새 레이어를 추가합니다. Docker와 같은 컨테이너화 기술은 빌드 시간을 단축하기 위해 가능할 때마다 이전 빌드의 레이어를 재사용하려고 시도합니다. 레이어에 대한 캐시는 이전 빌드 이후 기본 레이어가 변경되지 않은 경우에만 사용할 수 있습니다.


이미지 빌드 속도를 높이려면 Dockerfile 아래에 자주 변경될 수 있는 지침을 배치하는 것이 좋습니다. 이 접근 방식을 통해 Docker는 캐싱 시스템을 보다 효과적으로 활용할 수 있습니다. 예를 들어, 소스 코드는 자주 변경되는 경우가 많기 때문에 프로세스가 끝날 무렵에는 소스 코드를 이미지에 복사하는 것이 좋습니다.


이미지 캐시 ~ https://cloud.google.com/architecture/best-practices-for-building-containers


이미지가 더 가벼워지지는 않지만 빌드 프로세스가 빠르게 실행됩니다!

불필요한 도구 제거

컨테이너 이미지에는 불필요한 도구가 포함되어 이미지가 팽창하고 잠재적인 보안 취약점이 발생하는 경우가 많습니다. 예를 들어 해커는 netcat 과 같은 도구를 악용하여 무단 액세스 권한을 얻은 경우 컨테이너 내에서 악의적인 활동을 수행할 수 있습니다.


컨테이너 이미지와 함께 제공되는 도구 및 라이브러리 세트를 엄격하게 유지 관리하면 보안 위협을 줄이는 데 크게 도움이 될 수 있으며 이미지가 더 얇아질 수도 있습니다. 작은 이미지가 더 빨리 다운로드되므로 컨테이너가 더 빠르게 시작됩니다.

가장 작은 기본 이미지 사용

FROM 명령어에서 참조하는 이미지를 기본 이미지라고 합니다. 기본 이미지는 생성된 최종 이미지의 크기를 크게 좌우합니다. 이미지의 최종 크기를 줄이기 위해 가능한 가장 작은 기본 이미지를 사용하도록 노력해야 합니다.


알파인 이미지는 크기가 더 작고 개발 활동을 지원하는 데 충분한 도구가 포함되어 있는 경우가 많으므로 가능하면 알파인 이미지를 사용하십시오.


작은 이미지에 필요한 모든 도구가 포함되어 있지 않더라도 이를 사용하는 것이 더 나은 옵션일 수 있습니다. 더 가벼운 기본 이미지 위에 필요한 패키지를 설치하면 더 무거운 이미지를 사용하는 것보다 비용이 절약될 수 있습니다.

꼭 필요한 것만 복사하세요!

소스 코드를 복사하는 동안 원하지 않는 파일과 폴더도 많이 복사될 수 있습니다. 이로 인해 이미지 크기가 증가하고 궁극적으로 부풀어오르게 됩니다. 복사되는 파일의 양을 최소화하고 최소한으로 유지하십시오.


우리 업계에서는 컨테이너 이미지 최적화와 모범 사례 확립의 중요성을 간과하는 경우가 많습니다. 그러나 이러한 관행을 준수함으로써 발생하는 실질적인 이점은 아무리 강조해도 지나치지 않습니다. 개발자로서 슬림하고 빠른 컨테이너 이미지 생성에 지속적으로 우선순위를 두는 것이 중요합니다.


이것으로 우리는 이 글의 마지막에 도달합니다. 재미있게 읽으셨기를 바랍니다!