(참고: Kubernetes up and running 2/e)

 

용량이 큰 컨테이너 이미지를 사용하면 이미지 pull, push가 오래 걸립니다

이미지 크기 최적화를 위해 두가지를 알아둡시다

  1. 하위 레이어에서 제거된 파일은 실제 이미지에 존재한다
  2. 각 레이어는 하위 레이어와 독립적인 델타 -> 레이어를 변경할 때마다 하위 모든 레이어가 변경됨
    .
    └── layer A: contains a large file named 'BigFile'
        └── layer B: removes 'BigFile'
            └── layer C: builds on B by adding a static binary

첫번째로, A 레이어에 대용량 파일이 있고, B 레이어에서 그 파일을 지우면 C 레이어에서는 그 파일에 더 이상 접근할 수 없습니다. 하지만 실제로는 A 레이어에 존재하기 때문에 이미지 pull, push할 때 포함됩니다

 

#1
    .
    └── layer A: contains a base OS
        └── layer B: adds source code server.js
            └── layer C: installs the 'node' package

#2
    .
    └── layer A: contains a base OS
        └── layer B: installs the 'node' package
            └── layer C: adds source code server.js

두번째, "OS - server.js - node 패키지 설치"와 "OS - node 패키지 설치 - server.js"가 있을 때를 생각해보면, 처음 pull은 동일하게 동작합니다

하지만 server.js가 변경됐을 때, 두번째 경우는 server.js만 변경하면 되지만, 첫번째 경우는 node 레이어가 server.js 레이어에 종속되기 때문에 node 패키지 역시 pull 해야 합니다

그래서 일반적으로 변경 가능성이 가장 적은 레이어부터 변경 가능성이 높은 레이어 순으로 배치해야 한다고 합니다

반응형