여러분은 아시나요?
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% 감소되었당.
'개발 잡담' 카테고리의 다른 글
간단하게 DNS 개선을 했다고 해야 하나 이걸 표현을 어떻게 한담. (0) | 2024.04.03 |
---|---|
코틀린은 널 싫어해 (0) | 2024.03.26 |
테이블 설계를 잘 했다면 반복자 패턴을 사용하지 않아도 되었을 텐데!^^ (0) | 2024.03.15 |
헤드 퍼스트 디자인 패턴 후기 (0) | 2024.03.04 |
잠이 안 오니까 간단한 프로젝트 후기를. (0) | 2024.02.26 |