-
Docker Build Time 개선기기술/Infra 2024. 1. 18. 23:07
문제점
같은 코드베이스에서 네 개의 거의 비슷한 도커파일을 통해 빌드하는데 일부 ( API, Admin ) 의 빌드 타임이 굉장히 늦어지는 문제를 발견 했습니다.
분석
너무나 당연하지만 문제는 이미지의 일부 코드가 달랐습니다.
왜 Worker 만 캐시되었을까?
actions@cache 를 사용해 캐시하고 있었는데 이 방식은 같은 이름의 가장 처음 생성한 캐시를 덮어쓰지 않습니다.
즉, 우리 build cache 가 4 번 실행되는 데 그 중 가장 빠르게 실행된 것이 캐시되었던 것이였습니다.
결론적으로 옛날에 Worker 와 API 의 Dockerfile 코드가 달라질 때 Worker 가 먼저 캐시를 선점했고
이후에도 캐시 된 애가 더 빠르니 Worker 가 계속 캐시를 선점한 것이였습니다.
해결
당연히 API, Worker 를 별도 캐시하면 된다고 생각했습니다.
actions@cache 와 build-and-push 의 cache-to 를 로컬로 설정하여 작업하고 있었지만
더 좋은 방법이 있었습니다. docker build 때 `cache-to` 옵션을 `gha`( github action ) 으로 주면 알아서 github action cache 를 호출해 저장합니다.
또한 `mode=max` 를 하여 레이어 별 캐시를 저장하여 일부가 바뀌더라도 캐시를 사용할 수 있도록 변경했습니다.
이제 제일 중요한 worker, api 별도 캐시인데 `scope` 옵션을 통해 별도 캐시로 분리할 수 있었습니다.
단점으로는 action 의 용량을 많이 쓰게 된다는 것에 있습니다.
캐시가 아무것도 없으면 9 분정도 걸리고 캐시가 있으면 2, 3 분정도 걸리게 해결했습니다.
'기술 > Infra' 카테고리의 다른 글
ECS 에 Key Pair 를 추가하거나 변경하기 (0) 2021.09.24 EC2 의 용량 확장하기 (0) 2021.09.24