반응형
FromLatest.io 사용하기
- FromLatest에서 Dockerfile Lint를 하고, 이미지를 작게 할 수 있는 다양한 팁을 얻을 수 있다.
- https://www.fromlatest.io/#/
더 작은 Base 이미지 사용하기
- alpine 이미지를 사용하면 이미지 용량을 줄일 수 있다.
DockerHub에서 이미지 태그에 alpine이 명시된 것들을 볼 수 있다. - https://hub.docker.com/_/alpine/
Application De-Coupling 하기
- 하나의 컨테이너는 단 하나의 어플리케이션 / 용도로만 사용한다. (객체지향 원칙의 SRP와 같이)
- 한 이미지에 다수의 애플리케이션/컴포넌트가 들어있다면 이를 각각의 컨테이너로 나눈다.
이를 통해 이미지 사이즈 감소, 더 나은 확장성, 재사용성을 얻을 수 있다.
Layer를 최소화하기
- RUN, COPY, ADD 명령들은 다 Layer로 만들어져 스택처럼 쌓이게 되고, 이는 Docker 이미지의 크기를 크게 만든다.
따라서 한 라인에 필요한 명령어를 명시하여 Layer가 겹겹이 쌓이는 것을 줄여야 한다. - 각 Layer로 생성된 것들은 다음 빌드 시 속도를 높이기 위해 변경사항이 없다면 재사용된다. (Build Cache)
따라서 개발 단계에서는 쉽게 구분하기 위해 명령을 쪼개서 사용하다가 Production용 빌드시 최대한 한 줄로 합친다.
- 단, --no-cache=true 옵션을 사용할 경우 Cache를 사용하지 않는다.
- Dockerfile에 명시된 명령어가 (부모 이미지 포함) 이전에 만들어진 Layer에서 사용된 명령어와 완벽하게 동일하지 않으면 캐시되지 않는다.
- ADD, COPY 명령으로 파일이 추가/복사 될 때, 각 파일의 체크섬을 계산하여 이미지의 것과 비교한다.
이때 파일의 최종 수정일, 최종 접근일은 고려 대상이 아니다.
- 한 라인에 너무 많은 내용이 있을 경우 \ (backslash)를 사용하여 개행을 함으로써 가독성을 높일 수 있다.
- multi-build 스테이지를 통해 (아마도 Production 용도로 사용될) 마지막 단계에 생성된 이미지에 어플리케이션 실행에 필요한 파일만 넣음으로써 이미지 용량을 극적으로 줄일 수 있다. (https://docs.docker.com/develop/develop-images/multistage-build/)
불필요한 패키지, 파일 설치하지 않기
- 패키지 매니저
- apt 패키지 매니저 사용시 --no-install-recommends 옵션을 넣는다.
- apt 패키지 매니저로 필요한 패키지를 설치한 후 rm -rf /var/lib/apt/lists/* 명령을 실행한다.
yum 패키지 매니저를 사용할 땐 yum clean all 명령을 실행한다.
불필요하게 남겨진 캐시 파일을 삭제함으로써 용량을 줄일 수 있다. - 만약 curl, wget 등으로 외부 네트워크에서 필요한 파일을 다운로드 했다면 다운로드 한 파일들(tar, tar.gz 등)과 curl, wget도 함께 삭제한다.
- 디버그 툴
- 나중에 쉽게 디버그하기 위해 vim, curl과 같이 어플리케이션에 불필요한 프로그램들을 설치하지 않는다.
- 최소한의 이미지로 필요한 것들만 설치한다.
- .dockerignore
- .gitignore와 같이 불필요한 파일 복사를 막아줌으로써 이미지 용량을 줄일 수 있다.
참고
반응형
'IT 인프라 > DevOps' 카테고리의 다른 글
Kubernetes Secret으로 기밀정보 관리하기 (0) | 2019.11.27 |
---|---|
Kubernetes ConfigMap으로 설정정보 관리하기 (0) | 2019.11.26 |
나만의 Docker Compose Cheat Sheet (0) | 2019.11.18 |
나만의 Dockerfile Cheat Sheet (0) | 2019.11.18 |
나만의 Docker Cheat Sheet (0) | 2019.11.16 |