지금까지 Dockfile를 만드록 Docker 컨테이너를 테스타했던 경험을 바탕으로 팁을 작성해본다.



1. 항상 Docker image는 최대한 작게 만들어야 한다.


처음 운영체제 Docker 이미지가 작더라도 조금씩 바이너리 또는 응용 프로그램을 설치하면 용량이 꺼진다. 


특히, yum update 또는 필요 없는 툴은 최대한 설치하지 않는다. 생각보다 툴은 용량을 많이 차지한다. 


용량이 꺼지면, 다음의 단점이 있다.

1. 배포를 해야 할 때, 다운로드해야 하기 때문에, 점점 속도가 느려진다.

2.용량이 크면 docker registry push 또는 docker hub push 할 때, 종종 에러가 발생할 수 있다. 계속 retry 해야 한다.. 

(아직 docker registry가 완벽하지 않다.)





2. Dockerfile 를 생성할 때는 설치 단위를 RUN 옵션으로 설정한다. 


Docker image는 history별로 layering이 되어 있다. 더 정확히 말하면, Dockerfile의 RUN 커맨드 하나가 history layer이다.  따라서 커맨드를 &&로 붙여 적당한 추상화를 할 수 있다.


apt-get update && apt-get install -y apache2 && apt-get clean && rm -rf /var/lib/apt/lists/*



docker history로 이미지를 보면, 마지막 컬럼이 SIZE이다. 내가 하는 모든 RUN에 대한 용량 체크를 할 수 있다. 



임시 파일/디렉토리 또는 /tmp 또는 wget으로 받은 압축 파일이 존재하는지 확인하고, 용량을 최대한 줄일 수 있도록 해야 한다. 





3. Docker image를 만들다 실패하더라도, 도커 이미지를 지우지 말고 다시 생성을 시도한다.


copy on write 방식이라, 기존에 쓰던 Docker image의 단계별 해시 정보가 있다면 바로 복사해서 쓰기 때문에, 최종 도커 이미지를 생성하기 전까지는 기존의 실패했던 이미지를 최대한 활용하는 방식이 좋다.



하지만, 앞 부분의 RUN 커맨드에서 변경이 일어나면, 뒷 부분까지 모두 해시 정보가 바뀔 수 있기 때문에 Dockerfile 전략을 잘 사용하는 것이 중요하다.


즉, Dockerfile에 새로운 설치를 추가할 때, 맨 마지막에 두어야 한다. 그 부분만 수정한 후, 다시 도커 이미지를 생성할 수 있기 때문에 빠르게 빌드할 수 있다. 





4. 도커 이미지 파일의 용량이 크다는 것은 그만큼 디스크와 CPU를 많이 소비할 수 있는 확률이 생길 수 있다.


Dockerfile을 최적화해도 용량이 늘어난다는 얘기는 계속 사용할 솔루션이 많다는 얘기이다.


8 cpu, 16G 장비에 4 GB가 안되는 도커 이미지를 컨테이너로 사용할 때, 거의 꽉차게 사용될 수 있다. 도커 이미지 특성상 부하가 많을 수 있기 때문에, 늘 테스트를 할 필요가 있다. 도커 컨테이너로 쓰일 장비를 늘 모니터링하고 좋은 장비를 사용하여 성능을 높일 수 있도록 노력해야 한다. 


Posted by '김용환'
,