본문 바로가기
개발 잡담

Dockerfile 이미지 빌드에 캐싱 활용하기

by 휴일이 2024. 3. 18.

 

 

 

여러분은 아시나요?

Dockerfile 명령어 순서만 바꿔도 이미지 빌드 시간이 단축된다는 사실을 !

 

 

 

이번에 도커를 배우면서 알게됐다.

도커에는 이미지 레이어가 있어서

Dockerfile 에서 애플리케이션 파일들을 COPY 할 때

"굳이 다시 실행하지 않아도 되는 명령이나 복사하지 않아도 되는 파일"이 있다면

명령어 순서만 바꿔줘도 캐시를 이용해 빌드 속도를 증가할 수 있다는 !!! 그런 엄청난 사실.

 

 

 

안 그래도 기존에 사용하던 Dockerfile 이

tesseract 다운로드 후 -> 애플리케이션 데이터들을 복사

요런 순서였는데

 

코드가 바뀌면 무조건 tesseract 설치 후 애플리케이션 데이터들을 복사했기 때문에 이미지 빌드가 상당히 느렸다. ㅡㅅㅡ

 

1. Tesseract 는 사용 버전이 정해져있고

2. 설치해도 막상 진짜 사용하는 Tesseract 는 아파치에서 인스톨한 버전이 아니라 디렉토리에 따로 저장해서 씀

그래서 apt-update-install 구문을 이미지 빌드 때마다 넣지 않아도 된다고 생각했음.

 

그럼 어떤 식으로 바뀌었냐!

 

기존 Dockerfile

FROM openjdk:17-jdk-slim

COPY . .

RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install vim tesseract-ocr

CMD ["java", "-jar", "test.jar"]

 

바뀐 Dockerfile

FROM openjdk:17-jdk-slim

RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install vim tesseract-ocr

COPY . .

CMD ["java", "-jar", "test.jar"]

 

이렇게 COPY 명령어를 Tesseract 설치 후반에 두는 것으로

RUN ----- 까지는 캐시를 이용하고

COPY . . 부터는 새로 레이어를 쌓도록 했다. (코드가 바뀌었을 때만 COPY 부터 다시)

 

 

그래서 빌드 속도가 상당히! 빨라졌는데

이거 또 체크 안 해볼 수 없지 ㅎㅅㅎ

 

기존 이미지 빌드

보면 FROM, 첫 줄 까지는 도커 캐시를 이용해서 레이어를 쌓지만

이후에는 캐시를 사용하지 않는 것을 볼 수 있다.

-  빌드 시간 23.6s

 

개선 후 이미지 빌드

이제는 코드가 변경됐으니 COPY 부터 실행해도 된당!

그 이전에는 캐시를 사용하는 것을 볼 수 있다.

- 빌드 시간 2.2s

 

23.6s -> 2.2s

총 21.4s 감소!!!!!

 

 

 

 

틈나는대로 도커 배우길 잘했당.. (코쓱)

이렇게 실제로 성능 개선을 하니 매우매우매우매우매우x10000 뿌듯하다

나도 회사에 도움이 되었구나....^_^

-배포 서버에서는 64.7s -> 16.5s 로 약 75% 감소되었당.

728x90