Engineering Note

[Docker] Dockerfile 스크립트 최적화 본문

DevOps

[Docker] Dockerfile 스크립트 최적화

Software Engineer Kim 2025. 7. 2. 14:36

도커 이미지 파일을 만들려면 Dockerfile을 작성하는데, 이때 이미지 레이어 캐시원리를 이해하면 Dockerfile 스크립트를 최적화 할 수 있다.


Dockerfile 스크립트의 인스트럭션은 각각 하나의 이미지 레이어와 1:1로 연결되는데, 인스트럭션 겨로가가 이전 빌드와 같다면, 이전에 캐시된 레이어를 재사용한다.(내부적으로 해시값 사용)

아래와 같은 Dockerfile이 있을 때, 빌드 후에 app.js를 수정하고 다시 빌드하면, COPY app.js 인스트럭션 위 스크립트는 변경된 사항이 없기 때문에 도커가 캐시된 레이어를 사용하고 COPY app.js . 부터는 새로 인스트럭션을 수행한다. 그런데 COPY app.js 이후에 해당하는 인스트럭션 'CMD ["node", "/web-ping/app.js"]' 는 변경된 사항이 없음에도 다시 수행된다. 

이러한 Dockerfile의 이미지레이어 원리를 이해하면 스크립트를 수정해서 빌드 속도를 최적화 할 수 있다.

FROM diamol/node

ENV TARGET="blog.sixeyed.com"
ENV METHOD="HEAD"
ENV INTERVAL="3000"

WORKDIR /web-ping
COPY app.js .

CMD ["node", "/web-ping/app.js"]

 

 

 

인스트럭션 'CMD ["node", "/web-ping/app.js"]' 는 FROM node 다음에만 나오면 되고, 이미지를 빌드할 때 수행되는 인스트럭션이 아니고, 이미지로 부터 컨테이너를 실행할 때 수행되는 명령어기 때문에 아래 처럼 수정할 수 있다. (인스트럭션 'COPY app.js .'은 이미지가 빌드 될 때 수행)

FROM diamol/node

CMD ["node", "/web-ping/app.js"]

ENV TARGET="blog.sixeyed.com" \
    METHOD="HEAD" \
    INTERVAL="3000"

WORKDIR /web-ping
COPY app.js .

 

이렇게 수정하면 이미지를 빌드 할 때 변경된 COPY app.js . 부분만 재실행돼서 빌드를 최적화 할 수 있다.


 

참고 자료 : 도커 교과서(엘튼 스톤맨), p79~81

Comments