Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-how-and-why-to-build-small-container-images

2018 년 4 월 21 일

Info

Table of Contents

Containerizing interpreted languages

Ruby, Python, Node.js, PHP 등의 해석 언어는 코드를 실행하는 인터프리터를 통해 소스 코드를 보냅니다. 이렇게하면 컴파일 단계를 건너 뛸 수있는 이점이 있지만 코드와 함께 인터프리터를 제공해야한다는 단점이 있습니다.

...

그러나 결과 이미지가 65MB로 훨씬 더 작기 때문에 그만한 가치가 있습니다!

Containerizing compiled languages

Go, C, C ++, Rust, Haskell 등과 같은 컴파일 된 언어는 많은 외부 종속성없이 실행할 수있는 바이너리를 만듭니다. 즉, 컴파일러와 같은 바이너리를 생성하기위한 도구를 제공하지 않고도 바이너리를 미리 빌드하고 프로덕션에 제공 할 수 있습니다.

...

참고 : 더 많은 공간을 절약하고 사용하지 않는 종속성을 제거하려면  Google  distroless 프로젝트  살펴 보는 것이 좋습니다  . Java 사용자는 Jib을 확인할 수도 있습니다  . 그러나 Alpine은 표준 디버깅 도구를 사용하고 종속성을 설치하는 것이 훨씬 쉽기 때문에 기본 이미지로 여전히 좋은 선택입니다 (공격을위한 더 많은 공간과 약간 더 높은 표면적 비용으로).

컨테이너를 만들고 보관할 위치

이미지를 빌드하고 저장하려면 Google Container Builder  Google Container Registry를 함께 사용하는 것이 좋습니다 . Container Builder는 매우 빠르며 이미지를 Container Registry에 자동으로 푸시합니다. 대부분의 개발자는 무료 등급에서 모든 작업을 쉽게 수행해야하며 Container Registry는 원시 Google Cloud Storage 와 동일한 가격입니다 (저렴합니다!).

...

또한 Container Registry는 즉시 취약성 스캔 도구와 IAM 지원을 제공합니다. 이러한 도구를 사용하면 컨테이너를보다 쉽게 ​​보호하고 잠글 수 있습니다.


더 작은 컨테이너의 성능 평가

사람들은 소형 컨테이너의 가장 큰 장점은 구축 시간과 풀링 시간 모두의 단축이라고 주장합니다. onbuild로 만든 컨테이너와 다단계 프로세스에서 Alpine으로 만든 컨테이너를 사용하여이를 테스트 해 보겠습니다!

Info

요약 : 강력한 컴퓨터 나 Container Builder에 대해서는 큰 차이가 없지만, 더 작은 컴퓨터와 공유 시스템 (많은 CI / CD 시스템처럼)에 대해서는 큰 차이가 있습니다. 작은 이미지는 절대적인 성능 측면에서 항상 더 좋습니다.

대형 머신에서 이미지 빌드

첫 번째 테스트에서는 꽤 튼튼한 노트북을 사용하여 빌드 할 것입니다. 사무실 WiFi를 사용하고 있으므로 다운로드 속도가 매우 빠릅니다!

...

다시 말하지만, 더 작은 이미지를 사용하면 약간의 이점이 있지만 예상했던 것만 큼 극적이지는 않습니다.

소형 기계에 이미지 구축

그렇다면 더 작은 용기를 사용하는 것이 유리할까요? 빠른 인터넷 연결 및 / 또는 Container Builder를 갖춘 강력한 노트북이 있다면 그렇지 않습니다. 그러나 덜 강력한 기계를 사용하면 이야기가 바뀝니다. 이를 시뮬레이션하기 위해 겸손한 Google Compute Engine f1-micro VM을 사용하여 이러한 이미지를 빌드하고, 푸시하고, 가져 왔는데 결과는 놀랍습니다!

...

이 경우 더 작은 컨테이너를 사용하면 정말 도움이됩니다!

Pulling on Kubernetes

컨테이너를 만들고 밀어내는 데 걸리는 시간은 신경 쓰지 않을 수도 있지만 컨테이너를 당기는 데 걸리는 시간은 정말 신경 써야합니다. Kubernetes의 경우 이는 프로덕션 클러스터에서 가장 중요한 지표 일 것입니다.

...

여러 배포에서 여러 컨테이너의 풀 성능이 여기에 실제로 추가 될 수 있으며 작은 컨테이너를 사용하면 잠재적으로 배포 시간에서 몇 분을 단축 할 수 있음을 알 수 있습니다.

보안 및 취약성

성능 외에도 더 작은 컨테이너를 사용하면 상당한 보안 이점이 있습니다. 작은 컨테이너는 일반적으로 큰 기본 이미지를 사용하는 컨테이너에 비해 공격 표면이 더 작습니다.

...

대부분의 문제는 우리 앱과 관련이 없으며 오히려 우리가 사용하지 않는 프로그램과 관련이 있음을 알 수 있습니다! 다단계 이미지는 훨씬 더 작은 기본 이미지를 사용하기 때문에 손상 될 수있는 항목이 더 적습니다.

결론

소형 컨테이너 사용의 성능 및 보안 이점은 그 자체로 입증됩니다. 작은 기본 이미지와 "빌더 패턴"을 사용하면 작은 이미지를 더 쉽게 빌드 할 수 있으며 개별 스택 및 프로그래밍 언어를위한 다른 많은 기술도 컨테이너 크기를 최소화 할 수 있습니다. 무엇을 하든지 컨테이너를 작게 유지하려는 노력이 그만한 가치가 있음을 확신 할 수 있습니다!